2015-09-12 42 views
0

我收到$q->execute线上的HY093错误。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(?替换与被引用的字符串),它的工作原理。

任何想法可能会失踪?

+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"); 
+0

非常感谢。永远不会想到这一点。我添加了一行: $ data = array_values($ data); – user2803100