Php 为什么我';“我得到了”;您的SQL语法中有一个错误";错误?

Php 为什么我';“我得到了”;您的SQL语法中有一个错误";错误?,php,mysql,sql,mysqli,prepared-statement,Php,Mysql,Sql,Mysqli,Prepared Statement,我在准备mysqli语句时遇到以下错误 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在“电话=?,状态=?,“日期”之间?然后呢?按id描述订购 第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

我在准备mysqli语句时遇到以下错误

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在“电话=?,状态=?,“日期”之间?然后呢?按id描述订购 第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();

其中子句之间用
(或
)分隔,而不是逗号。您还有另一个语法错误,将列名
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 ?");

这是无效的语法:

WHERE id = ?, phone = ?
你想要这个:

WHERE id = ? AND phone = ?
或者可能是:

WHERE id = ? OR phone = ?
或者在
WHERE
子句中进一步组合显式布尔逻辑


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

我相信您想使用
而不是
基本问题

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

快速解决方案

替换

WHERE id = ?, phone = ?

多一点解释


在一个SELECT语句中只能有一个WHERE子句。在单个WHERE子句中,使用逻辑运算符(如组合多个条件。逗号(,)适用于in子句,可与WHERE子句结合使用。

这可能只是一个注释。我同意这一点,但我的声誉很低,因此我不允许对问题发表评论
WHERE id = ? AND phone = ?