Почему я получаю сообщение об ошибке «У вас ошибка в синтаксисе SQL»? - PullRequest
0 голосов
/ 03 марта 2019

Я получаю следующую ошибку при подготовке оператора mysqli.

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с «phone =?, status =?», «date» между?А ТАКЖЕ ?ЗАКАЗАТЬ ПО ID DESC LIMIT?в строке 1

mysqli подготовил оператор:

$stmt = $mysqli->prepare("SELECT id,role,fullname,phone,email,balance,status,parent, date_format(date,'%d-%m-%Y %h:%i:%s %p') AS date FROM users WHERE id = ?, phone = ?, status = ?, 'date' between ? AND ? ORDER BY id DESC LIMIT ?");
if ( false===$stmt ) 
{
  die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$rc = $stmt->bind_param('iiissi',$duid,$dmobile,$dstatus,$sdatetime,$edatetime,$dlimit);
if ( false===$rc ) 
{
  die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$re = $stmt->execute();
if ( false===$re ) 
{
  die('execute() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->store_result();
$stmt->bind_result($userid, $urn, $uname, $uphone, $uemail, $ubalance, $ustatus, $up, $udate);
$stmt->fetch();

Ответы [ 4 ]

0 голосов
/ 03 марта 2019

Основная проблема

Вы пытались объединить несколько условий, используя запятую (,), что синтаксически неправильно.

Быстрое решение

Заменить

WHERE id = ?, phone = ?

на

WHERE id = ? AND phone = ?

Бит Подробнее Объяснение

В одном операторе SELECT может быть только одно предложение WHERE .Несколько условий объединяются с использованием логических операторов, таких как И и ИЛИ , в одном предложении WHERE .Запятая (,) применяется в предложении IN , которое можно использовать вместе с предложением WHERE .

0 голосов
/ 03 марта 2019

Это неверный синтаксис:

WHERE id = ?, phone = ?

Вы хотите это:

WHERE id = ? AND phone = ?

Или, возможно, это:

WHERE id = ? OR phone = ?

Или какая-то дальнейшая комбинация явного логического значениялогика в вашем предложении WHERE.

(повторите для остальных частей предложения WHERE.)

0 голосов
/ 03 марта 2019

Я полагаю, вы хотите использовать AND или OR вместо ,

0 голосов
/ 03 марта 2019

WHERE предложения разделяются AND (или OR), а не запятой.У вас также есть другая синтаксическая ошибка, когда вы помещаете имя столбца, date в кавычки.Это должны быть клещи.Кавычки для строк.

$stmt = $mysqli->prepare("SELECT id,role,fullname,phone,email,balance,status,parent, date_format(date,'%d-%m-%Y %h:%i:%s %p') AS date FROM users 
                         WHERE id = ? AND phone = ? AND status = ? 
                         AND `date` between ? AND ? ORDER BY id DESC LIMIT ?");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...