PDO查询返回错误

PDO查询返回错误

问题描述:

我有一个非常简单的问题...跑步什么的下方会返回一个错误:PDO查询返回错误

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

但我只是没有看到它。我计算了8个变量和8个令牌......我错过了什么?我一直在盯着它很多年,希望能在这里指出什么是我没有看到的。对这个愚蠢的问题抱歉。

$forward = '-'; 
$datetime = strtotime('now'); 
$mysqldate = date('Y-m-d H:i:s', $datetime); 
$systemInfo = leSniff(); 
$stmt = $conn->prepare('UPDATE users SET last_login = :mysqldate, 
    last_ip = :last_ip, forward = :forward, platform = :platform, 
    browser = :browser, system = :system 
    WHERE email = :email AND password = :password'); 
$query->execute(array(
    ':email' => $email, 
    ':password' => $password, 
    ':mysqldate' => $mysqldate, 
    ':last_ip' => $_SERVER['REMOTE_ADDR'], 
    ':forward' => $forward, 
    ':platform' => $systemInfo['platform'], 
    ':browser' => $systemInfo['name'], 
    ':system' => $systemInfo['userAgent'] 
)); 
+0

你不应该有这样的一般变量名多准备语句。 – 2013-02-19 12:50:02

+0

为什么不呢?原谅我我的无知:) – Galadre 2013-02-19 12:51:31

+0

我已经在我的回答中解释了这一点。 – 2013-02-19 12:52:38

那就是:

$stmt = $conn->prepare('UPDATE users SET last_login = :mysqldate, last_ip = :last_ip, forward = :forward, platform = :platform, browser = :browser, system = :system WHERE email = :email AND password = :password'); 
$query->execute(array(

应该是:

$stmt = $conn->prepare('UPDATE users SET last_login = :mysqldate, last_ip = :last_ip, forward = :forward, platform = :platform, browser = :browser, system = :system WHERE email = :email AND password = :password'); 
$stmt->execute(array(
^^^^^ 
+1

哦哇......好吧,我希望我不是唯一一个犯这样愚蠢错误的人!非常感谢您指出这一点,我从我找到的脚本中复制了一些内容,并忘记更改变量以匹配我自己的工作。当它允许我接受这个答案时(9分钟)。 – Galadre 2013-02-19 12:50:11

+0

我想知道社区与这类问题有什么关系。 – 2013-02-19 14:40:49

我怕你的牺牲品一个错字:

$stmt = $conn->prepare('...'); 
$query->execute(...); 

你准备的在$stmt声明,但你正在执行$query

为了防止这类情况,你应该给准备语句的更具描述性的变量名,而不是$stmt$query

$update_users = $conn->prepare('...'); 
$update_users->execute(...); 
+0

啊那样。我想你是对的!我应该并且会开始更好地指定我的变量。感谢您的建议。 – Galadre 2013-02-19 12:55:31