错误:SQLSTATE [hy093]:无效的参数号
我可以echo'ed输出转换到该在phpMyAdmin去执行SQL语句...错误:SQLSTATE [hy093]:无效的参数号
从这:
INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES(?,?,?,?,?)Value:'00.000.000.000', '00.000.000.000', 0,0000, 1
进入这个:
INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES('00.000.000.000', '00.000.000.000', 0,0000, 1)
它插入到数据库中的数据,没有错误,但它执行通过PH P-PDO ...
有了:
SQLSTATE[HY093]: Invalid parameter number
代码:
$columns = '('.implode(',', array_keys($user_connection)).''.",user_id,connections)";
$inserts="(".implode(',',array_fill(0,count($user_connection)+2, '?')).")";
$values = implode(', ',($user_connection)).",$user_id, 1";
$sql_insert = "INSERT INTO crumbs ".$columns." VALUES".$inserts;
$stmt = $this->_db->prepare($sql_insert);
$stmt->execute(array($values));
编辑 - 添加$ user_connection
$user_connection [ 'ip_address'] = "'".$_SERVER['REMOTE_ADDR']."'";
$user_connection [ 'ip_address_2']="'".$_SERVER['HTTP_X_FORWARDED_FOR']."'";
$user_connection ['device_info']=0;
该错误发生在执行SQL代码的过程中。我已经浏览了所有的例子,并没有发现任何相同的东西,我认为这是我错过的简单东西(一条规则?),因为代码在本地执行。
你必须做这样的事情:
// ..code..
$values = $user_connection;
$values[] = $user_id;
$values[] = 1;
// ..code..
$stmt->execute($values);
问题的说明:
当你有多个?
占位符,你可以传递每个值有界作为数组的值(参见the manual的Example #3
)。
现在,因为你正在使用implode,$values
将是一个字符串,像
'192.168.0.1', '8.8.8.8', 0, 'userid', 1
这意味着,当你调用execute(array($values))
,它将,其实,势必像这样(representation-只是,它不是真的很喜欢这个)
INSERT INTO crumbs (ip_address,ip_address_2,device_info,user_id,connections) VALUES ("'192.168.0.1', '8.8.8.8', 0, 'userid', 1", ?, ?, ?, ?)
,因为您只需发送,并且具有一个值数组:另一个阵列的内爆。既然你没有提供的值相同数量的(1)你有占位符(5),你最终
Invalid parameter number
我已经张贴的$ user_connection结构,我可能有它的一个不正确的认识,但我几乎完全封装了我的执行命令'数组'或如上:execute(array($ values));值变成逗号分隔的数组值(或者我的经验)。尽管给我一分钟,我会尝试封装在一个单独的数组中。 – Chris
好的,这工作,我很困惑为什么array()不起作用在这个实例中,它在我的代码中的其他地方工作。 – Chris
也许在其他地方有点不同..我不能肯定地说不看它(确保值正确地存储在batabase中) – FirstOne