我有一张桌子: 列数很少的“对象”: object_id:int,object_type:int,object_status:int,object_lati:float,object_long:float 我的疑问是:
$stmt = $db->query('SELECT o.object_id, o.object_type, o.object_status, o.object_lati, o.object_long FROM objects o WHERE o.object_id = 1');
$res = $stmt->fetch();
PDO抛出错误:
SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
当我删除列object_lati
或object_long
时,查询工作正常。
答案 0 :(得分:1)
虽然这个特定的问题不是真正的问题,因为提供的代码永远不会产生这样的错误,但Google似乎很高兴将访问者发送到此页面。以下是答案:
此问题永远不会由query()
方法调用引起,因为它基本上属于预准备语句。
错误本身很清楚:“令牌数”代表查询中?
或:name
令牌的数量(也称为“占位符”),而“绑定的变量数量” “代表通过bindValue
或`bindParam进行以太绑定的变量,或通过execute发送的变量(技术上相同)。因此,当一个人试图绑定比查询中定义的标记更多的变量时,PDO会引发此错误。
例如,如果有一个查询没有定义令牌,但我们正在尝试将变量绑定到它:
$stmt = $db->prepare('SELECT * FROM objects o WHERE o.object_id = 1');
$stmt->execute(array($id));
然后它将导致有问题的错误消息,因为绑定变量(1)的数量与令牌数量(0)不匹配。
要解决此问题,只需仔细比较准备好的查询中的令牌数量以及绑定到该语句的变量数量。
答案 1 :(得分:-1)
尝试以下语句:
$stmt = $db->query('SELECT object_id, object_type, object_status, object_lati, object_long FROM objects o WHERE object_id = ? ', 1);
答案 2 :(得分:-1)
试试这个
$row = $db->fetchRow('SELECT o.object_id, o.object_type, o.object_status, o.object_lati, o.object_long FROM objects o WHERE o.object_id = 1');
// return false if no result found
或获取记录集
$rs = $db->fetchAll('SELECT o.object_id, o.object_type, o.object_status, o.object_lati, o.object_long FROM objects o WHERE o.object_id = 1');
// returns array with results