Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобрать запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Andrey
Отправлено: 21 Мая, 2007 - 22:18:23
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Май 2007  


Помог: -1 раз(а)




Для определения количества товаров в корзине есть запрос:
$sql="SELECT count(*) FROM basket WHERRE customer=' " . session_id() ." ' ";
Мне не совсем понятно почему count(*), а не просто звездочка и зачем перед session_id() ставить одинарную кавычку, потом двойную, а потом ещё и точку? Почему этот запрос нельзя написать в таком виде:
$sql="SELECT * FROM basket WHERRE customer=' session_id() ' ";
Второй вид выдаёт ошибку.

 
 Top
evgenijj
Отправлено: 21 Мая, 2007 - 22:39:03
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Функция session_id() возвращает строку - поэтому при составлении запроса мы должны использовать одинарные кавычки, чтобы указать MySQL, что это строка:
SELECT email FROM users WHERE surname='Иванов';
Если использовать твой вариант
$sql="SELECT * FROM basket WHERE customer=' session_id() ' ";
то как PHP догадается о том, что session_id() - это функция, которую надо выполнить, а результат выполнения подставить в запрос? Переменную PHP "опознает" по знаку $:
$surname = "Иванов";
$sql="SELECT * FROM basket WHERE customer='$surname'";

Функция COUNT(*) возвращает количество записей, удовлетворяющих условию WHERE. Можно сделать запрос
$sql="SELECT * FROM basket WHERE customer=' " . session_id() ." ' ";
который вернет все записи, удовлетворяющих условию WHERE, а потом получить количество возвращенных записей с помощью функции mysql_num_rows() - но зачем такие сложности?
 
 Top
Andrey
Отправлено: 21 Мая, 2007 - 23:30:43
Post Id


Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Май 2007  


Помог: -1 раз(а)




evgenijj пишет:
Функция session_id() возвращает строку - поэтому при составлении запроса мы должны использовать одинарные кавычки, чтобы указать MySQL, что это строка:
SELECT email FROM users WHERE surname='Иванов';
Если использовать твой вариант
$sql="SELECT * FROM basket WHERE customer=' session_id() ' ";
то как PHP догадается о том, что session_id() - это функция, которую надо выполнить, а результат выполнения подставить в запрос? Переменную PHP "опознает" по знаку $:
$surname = "Иванов";
$sql="SELECT * FROM basket WHERE customer='$surname'";

Хорошо, про кавычки понятно, что сам запрос на строку в одинарных, переменная в двойных, то есть ... customer=' "session_id()" ', а зачем тогда еще и точки перед и после session_id() ?
 
 Top
evgenijj
Отправлено: 22 Мая, 2007 - 00:09:03
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Точка "склеивает" строки:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $name = "Иван";
  4. $surname = "Иванов";
  5. $email = "ivanov@mail.ru";
  6. // Выводит строку
  7. // Пользователь Иван Иванов, адрес эл. почты ivanov@mail.ru
  8. echo "Пользователь ".$name." ".$surname.", адрес эл. почты ".$email;
  9. ?>
  10.  

PHP:
скопировать код в буфер обмена
  1.  
  2. $sql="SELECT COUNT(*) FROM basket WHERE customer='" . session_id() ."'";
  3. echo $sql;
  4.  

Результат:
SELECT COUNT(*) FROM basket WHERE customer='js345jk345'
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB