Welcome to php club

PHP FAQ from PHPclub.ru: MysqlQuery ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

My Sql


У меня не работает запрос к базе, что делать?


Симптомы:

<?
Warning
: mysql_*_*(): supplied argument is not a valid MySQL result resource in ...
?>


Во-первых, надо внимательно посмотреть на сам запрос. Для этого надо его вывести. Ищем то место, где делается запрос (обычно это вызов функции mysql_query()) и копируем то, что у неё в первом параметре.


Например:

<?
$result
= mysql_query('SELECT * FROM mytable WHERE name LIKE \''.$username.'\'');


Значит нам нужна строка 'select * from mytable where name like \.$username.'\. Проще всего, когда скрипт собирает запрос в какую-либо переменную:


<?
$sql
= 'select * from mytable where name like \''.$username.'\'';
$result = mysql_query($sql);


Тогда нам просто придется вывести эту переменную.


Здесь следует немного отойти от темы и коснуться темы дебаггинга в PHP вообще. Очень удобно иметь для этого специальную функцию, с помощью которой можно контролировать значения переменных.

<?
function dump($var) {
    echo
'<pre>';
    
print_r($var);
    echo
'</pre>';
}


Только будьте внимательны – если у вас в переменной будет HTML, то проконтролируйте исходный код страницы в браузере.


Теперь смотрим на запрос и понимаем, что мы на самом деле не совсем то имели ввиду, исправляем очевидные ошибки, и все начинает работать. Нет? Ну ладно, будем дальше искать. Теперь мы посмотрим, чем именно My SQL не угодил этот запрос. Все просто – нужно написать одну строчку после запроса:


<?
echo mysql_error();


Тут вы увидите много интересного. Например: Table 'data_base.my_teble' doesn't exist. Из чего мы понимаем, что мы допустили очепятку в названии таблицы (ну или забыли эту самую таблицу создать).


Вот и все. Просто внимательнее следите за синтаксисом. Если уж совсем ничего не получается – пишите в форум, вам обязательно помогут. Только не забывайте в вопросе писать сам запрос и ошибку, которую выдал сервер.


 
Комментариев нет. [Показать комментарии/форму]