为什么会出现“您的SQL语法有错误”错误?

时间:2019-03-03 14:11:30

标签: php mysql sql mysqli prepared-statement

在准备mysqli语句时出现以下错误。

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   靠近'phone =?,状态=?,'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 :(得分:2)

WHERE子句用AND(或OR)分隔而不是逗号。您还遇到另一个语法错误,即在列名date中加引号。应该是tick子。引号是字符串。

$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 ?");

答案 1 :(得分:1)

我相信您想使用ANDOR而不是,

答案 2 :(得分:0)

这是无效的语法:

WHERE id = ?, phone = ?

您想要这个:

WHERE id = ? AND phone = ?

或者可能是这样:

WHERE id = ? OR phone = ?

或者在WHERE子句中使用显式布尔逻辑的进一步组合。

(重复WHERE子句的其余部分。)

答案 3 :(得分:0)

基本问题

您尝试使用逗号(,)组合多个条件,这在语法上是错误的。

快速解决方案

替换

WHERE id = ?, phone = ?

使用

WHERE id = ? AND phone = ?

更多说明

单个 SELECT 语句中只能有一个 WHERE 子句。在单个 WHERE 子句中使用 AND OR 之类的逻辑运算符组合多个条件。逗号(,)适用于 IN 子句,该子句可以与 WHERE 子句一起使用。