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

Форум MySQL

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

 

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

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

тема: Проверка значения в таблице, проблема с переменными
 
 автор: Angl   (21.05.2008 в 04:28)   письмо автору
 
 

Помогите, пожалуйста, разобраться.

Нужно проверить, имеется ли в таблице значение (скажем, 4) при двух других значениях, которые передаются из формы.

Вот код без переменных, который работает:


$sql = 'SELECT `bane` FROM `book_bowl` WHERE dato=\'22. maj\' AND tid=12'; 
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if (in_array('4', $row)) {
echo "'4' found";
}


Но здесь значения dato и tid вписаны конкретно, вручную. Когда же я пытаюсь заменить их на переменные:


 
$dato = '22.maj';
$tid = 12;
$sql = 'SELECT `bane` FROM `book_bowl` WHERE dato=`$dato` AND tid=`$tid`';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if (in_array('4', $row)) { 
echo "'4' found";
}

то выдаёт ошибку. Я пробовала убирать кавычки и назначать дополнительные, ставить точку перед именем переменной (почему это делается, я не знаю, видела просто такой синтаксис у кого-то в SELECTе, решила попробовать методом тыка: вдруг повезёт? не повезло) - ничего не помогает. Объясните, пожалуйста, в чём тут фишка, почему не читаются переменные? Ведь без них всё работает, а остальную часть кода я не меняла

   
 
 автор: sim5   (21.05.2008 в 04:39)   письмо автору
 
   для: Angl   (21.05.2008 в 04:28)
 

Справочное руководство по MySQL. Литералы: представление строк и чисел

   
 
 автор: Angl   (21.05.2008 в 05:09)   письмо автору
 
   для: sim5   (21.05.2008 в 04:39)
 

Ссылка не открывается. Погуглила по литералам, почитала. Ничего похожего на решение моей проблемы не нашла. Ни об особенностях синтаксиса записи переменных в SELECT, ни о возможных проблемах при использовании переменных. Не могли бы вы хотя бы коротко объяснить, хотя бы в чём загвоздка? Почему при подставлении переменных вместо значений в запись запроса скрипт перестаёт работать?

   
 
 автор: Angl   (21.05.2008 в 05:09)   письмо автору
 
   для: sim5   (21.05.2008 в 04:39)
 

Ссылка не открывается. Погуглила по литералам, почитала. Ничего похожего на решение моей проблемы не нашла. Ни об особенностях синтаксиса записи переменных в SELECT, ни о возможных проблемах при использовании переменных. Не могли бы вы хотя бы коротко объяснить, хотя бы в чём загвоздка? Почему при подставлении переменных вместо значений в запись запроса скрипт перестаёт работать?

   
 
 автор: sim5   (21.05.2008 в 05:20)   письмо автору
 
   для: Angl   (21.05.2008 в 05:09)
 

Для начала, перепешите свой запрос так:
$result = mysql_query($sql) or die (mysql_error());

   
 
 автор: Angl   (21.05.2008 в 05:28)   письмо автору
 
   для: sim5   (21.05.2008 в 05:20)
 

Сделала. Пишет в ответ: Unknown column '$dato' in 'where clause'
???

   
 
 автор: Angl   (21.05.2008 в 05:31)   письмо автору
 
   для: Angl   (21.05.2008 в 05:28)
 

Что-то теперь мне ещё непонятнее. 'where clause' - это что? И почему он называет переменную Unknown column?

   
 
 автор: sim5   (21.05.2008 в 05:47)   письмо автору
 
   для: Angl   (21.05.2008 в 05:31)
 

Это значит, что такой колонки, которую вы запрашиваете, MySQL в таблице на нашел. Читайте синтаксис запросов, ссылка которую я давал, у вас может временно не открывалась, а ответ есть по этой ссылке. Вот адрес главной страницы того, что вам нужно знать: http://www.mysql.ru/docs/man/.
Ваш запрос надо переписать так:
$sql = "SELECT `bane` FROM `book_bowl` WHERE dato='$dato' AND tid='$tid'";
$result = mysql_query($sql) or die (mysql_error());


PS. Кстати, вот то, что вы вставляли вручную: dato=\'22. maj\'. Вы что, еденичные строковые значения полей в таблице держите в кавычках? Зачем?

   
 
 автор: Angl   (21.05.2008 в 12:41)   письмо автору
 
   для: sim5   (21.05.2008 в 05:47)
 

>Это значит, что такой колонки, которую вы запрашиваете, MySQL в таблице на нашел.
>Читайте синтаксис запросов, ссылка которую я давал, у вас может временно не
>открывалась, а ответ есть по этой ссылке. Вот адрес главной страницы того, что вам нужно >знать: http://www.mysql.ru/docs/man/.

Ссылки до сих пор не работают :-(. Но буду продолжать щёлкать время от времени, в надежде, что откроются. Теорию-то почитать хочется! :-)

>Ваш запрос надо переписать так:
>
$sql = "SELECT `bane` FROM `book_bowl` WHERE dato='$dato' AND tid='$tid'";
>$result = mysql_query($sql) or die (mysql_error());
>


Спасибо большое, тепрь всё работает!!


>PS. Кстати, вот то, что вы вставляли вручную: dato=\'22. maj\'. Вы что, еденичные строковые
>значения полей в таблице держите в кавычках? Зачем?

А это не я. Эту строчку выдал phpMyAdmin, когда я проверяла запрос на работоспособность. Я просто скопировала так, как он откорректировал. Кстати, сейчас проверила: без кавычек вокруг '22. maj' выдаёт ошибку. А 12 без кавычек проходит нормально. В самой таблице все значения стоят без кавычек.

   
 
 автор: sim5   (21.05.2008 в 13:19)   письмо автору
 
   для: Angl   (21.05.2008 в 12:41)
 

Строковые переменные в запросе надо обрамлять кавычками ('' или ""), для чисел нет.

   
 
 автор: Angl   (26.05.2008 в 03:33)   письмо автору
 
   для: Angl   (21.05.2008 в 04:28)
 

Я опять - с тем же скриптом, но с другой проблемой. С переменными и кавычками я вроде как разобралась, и скрипт заработал. Но радовалась я рано.

Идея была такая: сделать выборку значений одной колонки (не повторяются), а среди них потом поискать нужное число. Пробовала так (скрипт уже был выше, просто ещё раз приведу, для наглядности):

$sql = "SELECT `bane` FROM `book_bowl` WHERE dato='12. juni' AND tid='14'";  
$result = mysql_query($sql); 
$row = mysql_fetch_array($result); 
if (in_array('6', $row)) { 
echo "'6a' found";


Как оказалось, скрипт работал, потому что на тот момент в полученном из таблицы массиве было только одно значение. Как только появились другие, начались проблемы: он видел только первое, дальше искать не хотел. Я промучилась сутки, дошла до истерики, и написала в конце концов дубовый скрипт, который делал каждый раз новый запрос на конкретное значение. Всё работает прекрасно. Но проблема в том, что таблица-то сейчас маленькая, незаполненная. А если разрастётся, то будет работать медленно. То есть на первое время сойдёт то, что я сваяла, но потом надо всё равно переделывать.

Не объясните мне, пожалуйста, что у меня не так? Почему скрипт не видит в массиве дальше первого значения? И может, есть какой-нибудь способ перевести его в строку и тогда уже порыться в нём через eregi(), скажем? Или я усложняю, и всё гораздо проще, просто я не в курсе? Подскажите, пожалуйста!

   
 
 автор: Root   (26.05.2008 в 03:41)   письмо автору
 
   для: Angl   (26.05.2008 в 03:33)
 

цикл?
<?php
while ($row mysql_fetch_array($result)) {
...
}
?>

   
Rambler's Top100
вверх

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