На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Слово "status" и MySQL


При работе с базами данных и MySQL могут возникнуть некоторые недоразумения, ошибки. Об одной из них я и хочу рассказать в своей сегодняшней заметке. Итак, в одной из своих работ мне попалось сделать простой запрос к базе данных. Вот кусок кода:

$popol = 0;
$polgod = time() - 15724800;
$db->Query("SELECT * FROM db_payeer_insert WHERE user_id = '$usid' and sum >= '10' and status = '1' and date_add > '".$polgod."' ");
if ($db->NumRows()) {
$popol = 1;	
$db->Query("UPDATE db_users_b SET ekonomik = '0' WHERE id = '$usid'");
}
Если кому интересно, то здесь надо было узнать, вносил ли пользователь деньги последние полгода, была ли эта сумма больше десяти рублей, закончилась ли операция (поступили ли деньги). При выполнении всех этих условий обновляем некий коэффициент пользователя, по которому он может покупать саженцы за обычную цену.

Итак, запрос простейший, но для любого пользователя он ничего не выводил. То есть, число рядов в выборке равняется false, и условие никогда не выполняется. Почему? Начинаем разбираться. Путем обрезки и методом исключения находим, что виноват вот этот кусок:

status = '1'
Что же тут такого? Мы просто сравниваем значение поля status с единицей – то есть прошел ли платеж. Почему же происходит ошибка? Дело в том, что хотя слово «STATUS» и не указано как зарезервированное служебное слово в спецификации MySQL – на самом деле оно таким и является. Оно входит в конструкцию «SHOW STATUS».

Вы спросите, почему же, в таком случаем, мы можем использовать, например, слово «date» как идентификатор? Все просто: проблема со «status» проявляется не во всех СУБД, не во всех версиях phpmyadmin – в некоторых это не вызовет затруднений при использовании.

Но, чтобы все гарантированно избежать проблем, заключайте идентификаторы в одинарные кавычки – как и рекомендуется делать в спецификации для MySQL. Именно в одинарные, а не в апострофы – такая конструкция также не пройдет! Итого, имеем такую строку:

$db->Query("SELECT * FROM db_payeer_insert WHERE user_id = '$usid' and sum >= '10' and `status` = '1' and date_add > '".$polgod."' ");
Как видите, все просто, но незнание такой информации может заставить неопытного программиста потратить немало времени для решения данной задачи. А если вам не хочется тратить время на это, то вы всегда можете обратиться ко мне: почта up777up@yandex.ru, вконтакте или скайп up777up2 - я могу проконсультировать вас по PHP, MySQL, JavaScript или сделать любую работу по вашему сайту. Быстро и недорого.





тегизаметки, php, mysql, status





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




Оператор Sizeof в C#
Microsoft Visual C# и csv


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.