HY093:参数数量错误 - 位置

HY093: Wrong number of parameters - positional

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

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined'

$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 时(将 ? 替换为带引号的字符串),它起作用了。

知道我可能遗漏了什么吗?

您正在混合使用 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");