HY093:参数数量错误 - 位置

时间:2015-09-12 07:44:18

标签: php mysql pdo prepared-statement

我在$q->execute行收到了HY093错误。

  

致命错误:未捕获的异常' PDOException'消息' SQLSTATE [HY093]:参数号无效:参数未定义'

$stmt = "INSERT INTO `survey`(`user`,`notes`,`lat`,`lon`,`acc`,`timestampx`) VALUES(?,?,?,?,?,?)";
$q = sql::$db->prepare($stmt);
var_dump($data);
$q -> execute($data);

和我的vardump回声:

array(6) {
   ["user"]=>string(9) "Your Name"
   ["notes"]=>string(5) "Notes"
   ["lat"]=>string(10) "35.1338614"
   ["lon"]=>string(19) "-106.64091979999999"
   ["acc"]=>string(4) "8512"
   ["time"]=>string(13) "1442043552884"
}

当我将这些数据复制并粘贴到MySQL中时(用引用的字符串替换?)它可以工作。

知道我可能缺少什么吗?

1 个答案:

答案 0 :(得分:3)

您正在混合使用PHP的两种方式。如果要使用关联数组来提供绑定值,则查询需要按名称引用它们,并使用冒号(:)来指示这些是绑定变量:

$stmt = "INSERT INTO `survey`" .
        "(`user`,`notes`,`lat`,`lon`,`acc`,`timestampx`) " . 
        "VALUES(:user, :notes, :lat, :lon, :acc, :time)";

或者,您可以保留$query,并以简单的位置数组提供参数:

$data = array("Your Name", 
              "Notes", 
              "35.1338614", 
              "-106.64091979999999", 
              "8512",
              "1442043552884");