Теперь представим, что чаще переводят из cp1251 в utf-8 и обратно.
Если в проекте заведомо других кодировок не предусмотренно, то данное решение лучше.
А если Мы изначально не знаем какие будут кодировки, будет ли их много или вообще одна, то проект плохо продуман и тогда не стоит заморачиваться оптимизацией в принципе, да и в принципе тогда не нужно заморачиваться, авось попрет.
Я вот лично не понимаю, зачем по мухам из пушки палить.
Вообщем в свое время тоже интересовал этот вопрос, после долгих поисков и полотен текста нашел такое решение, фишка в том, что данная функция работает в разы быстрее iconv:
Через .htaccess например приявязать ip админа, что бы с других нельзя было войти в админ зону, но это буде эффективно если ip статичный.
Использовать для хранения не БД а в .htpasswd http://www.php.su/articles/?cat=...che&page=010
Вопрос автора "Правильно ли, что можно присвоить значение не существующему свойству экземпляра."
Ответ да, но можно сделать заглушку переопредилив методы __set и __get.
т.к. Переопределять необходимо для каждого пользовательского объекта, ( о чудо ООП в действии! ) используем наследование, переопределяем вышеупомянутые методы в некой абстракции и из нее рашрияем все остальное. Если возможности расширить нет, например Класс уже рашрипяет, что-то реализуем интерфейс, что бы не забыть реализовать методы.
Скажете это какой-то левый геммор! Согласен на 100500+, достаточно просто быть внимательным. Но возможность существует и была дана автору, как он будет делать его выбор.
Наследование:
Если написать общий класс с методом __set() и расширять его, то не придется добавлять его в потомках, т.к. он уже определен в родителе. Думаю автор это имел ввиду.
Размещение бинарных файлов (картинок) в базе данных
Для помещеня бинарного файла в базу данных, надо...
1. создайте таблицу с полем BLOB
2. прочитайте данные, которые надо поместить в базу данных, в переменную $upload. Если это файл (картинка) на диске, то сделайте это так:
<?
unset($upload); // все переменные перед первым использованием надо уничтожать
$f=fopen("image.jpg","rb"); // имя файла или картинки -- открыли файл на чтение
while(!feof($f)) $upload.=fread($f,65000); // считали файл в переменную
fclose($f); // закрыли файл, можно опустить
...
3. защитите переменную от опасных символов ("прослешьте переменную"):
...
$upload=addslashes($upload);
...
4. загрузите переменную в базу данных:
...
mysql_query("INSERT INTO <таблица> (<поле>) VALUES ('$upload')");
?>
"Таблица" - имя таблицы, "поле" - название колонки в таблице типа BLOB, что были созданы при выполнении пункта 1. Разумеется, чтобы выполнить HTML запрос надо предварительно установить соединение с базой данных.
Для взятия бинарного файла из базы данных в браузере, надо...
Вы будете смеяться, но ничего особого не надо. Просто прочитайте ее как простую переемнную из базы данных. В переменную на языке ПХП можно упихать все, что надо. Правда, есть лимит памяти (будьте внимательны с переменными от 2 МБ), о котором надо помнить. Разумеется, лимит увеличить, но это тема не данной статьи.
Чтобы показать картинку их базы данных, надо...
Освоить пример 1 этой статьи, а вместо чтения из файла, взять переменную из базы данных, примерно вот так:
<?
... // подключение к Б.Д.
$res=mysql_query("SELECT <поле> FROM <таблица> WHERE <условия>")
or die("SQL ERROR in line ".__LINE__.", function mysql_query");
$image=mysql_result($res, <строка>, <колонка>); // берем переменную из б.д.
header("Content-type: image/gif");
echo $image;
?>