我可以将echo的输出转换为在phpMyAdmin中执行的SQL语句...
来自:
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
进入:
INSERT INTO crumbs(ip_address,ip_address_2,device_info,user_id,connections)VALUES(&#39; 00.000.000.000&#39;,&#39; 00.000.000.000&#39;,0,0000,1)< / p>
它将数据插入到数据库中,没有错误,但是它通过PHP-PDO ...
执行。通过
SQLSTATE [HY093]:参数号无效
代码:
$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代码期间发生错误。我已经浏览了所有的例子,没有发现任何相同的东西,我认为它是一个简单的东西,我缺少(规则?),因为代码在本地执行。
答案 0 :(得分:-1)
你必须做这样的事情:
// ..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))
时,它实际上会像这样绑定它(仅限于表示,它不是真的像这样)
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", ?, ?, ?, ?)
因为你只发送了一个有一个值的数组:另一个数组的内爆。由于您没有提供与占位符(5)相同数量的值(1),因此您最终得到了
参数编号无效