Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перестали работать некоторые SQL-запросы при обращении из PHP 5.1.6
 
 автор: B@cZ   (12.10.2006 в 17:54)   письмо автору
 
 

Доброго всем дня!
У меня раньше стоял PHP 4 все было нормально, когда поставил себе PHP 5 как модуль Apache, случилось следующее:

Перестали работать запросы вида:

$res = mysql_query("SELECT * FROM `talbe` WHERE `var` = '".$_POST['value']."'");
if (mysql_num_rows($res) {
...


$_POST['value'] - это переменная введенная с формы.
Если $_POST['value'] - Содержит русский текст, то скрипт ругается - Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Если $_POST['value'] - Содержит английский текст то все ок.

Не пойму в чем проблема, раньше все работало. Возможно кто-то знает в чем проблема.
За ранее благодарен.

   
 
 автор: Trianon   (12.10.2006 в 18:00)   письмо автору
 
   для: B@cZ   (12.10.2006 в 17:54)
 

перед if (mysql_num_rows($res) неплохо было бы проверять сам $res:

$sql = "SELECT * FROM `talbe` WHERE `var` = '".$_POST['value']."'"
$res = mysql_query($sql);
if(!$res) die("Error in $sql: " . mysql_error());
if (mysql_num_rows($res) { 
....

   
 
 автор: B@cZ   (12.10.2006 в 18:12)   письмо автору
 
   для: B@cZ   (12.10.2006 в 17:54)
 

Error in SELECT * FROM `talbe` WHERE `var` = 'Тест': Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='


Вот такую ошибку выдает... как с ней бороться? Кто подскажет? )

   
 
 автор: Trianon   (12.10.2006 в 19:19)   письмо автору
 
   для: B@cZ   (12.10.2006 в 18:12)
 

Это следствие того, что Вы не[правильно] указываете кодовую страницу для соединения с сервером. Похоже, данные в таблице лежат в 1251, а Вы обращаетесь без установки кодовой страницы, и как следствие, все Ваши запросы считаются написанными в latin1.
Самый простой способ - сразу после соединения с сервером выдавать запрос
mysql_query("SET NAMES '1251'");

   
 
 автор: B@cZ   (12.10.2006 в 19:46)   письмо автору
 
   для: B@cZ   (12.10.2006 в 17:54)
 

А где это поменять в настройках MySQL иди PHP5, чтобы каждый раз лишний запрос не делать? )

   
 
 автор: Trianon   (12.10.2006 в 19:50)   письмо автору
 
   для: B@cZ   (12.10.2006 в 19:46)
 

директива
[mysqld]
init-connect="SET NAMES cp1251" 

в конфиг-файле MySQL

Работать будет только для соединений, установленных пользователем, отличным от root.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования