错误: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代码的过程中。我已经浏览了所有的例子,并没有发现任何相同的东西,我认为这是我错过的简单东西(一条规则?),因为代码在本地执行。

+0

我已经张贴的$ user_connection结构,我可能有它的一个不正确的认识,但我几乎完全封装了我的执行命令'数组'或如上:execute(array($ values));值变成逗号分隔的数组值(或者我的经验)。尽管给我一分钟,我会尝试封装在一个单独的数组中。 – Chris

+0

好的,这工作,我很困惑为什么array()不起作用在这个实例中,它在我的代码中的其他地方工作。 – Chris

+0

也许在其他地方有点不同..我不能肯定地说不看它(确保值正确地存储在batabase中) – FirstOne

你必须做这样的事情:

// ..code.. 
$values = $user_connection; 
$values[] = $user_id; 
$values[] = 1; 
// ..code.. 
$stmt->execute($values); 

问题的说明:

当你有多个?占位符,你可以传递每个值有界作为数组的值(参见the manualExample #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

+0

嗯,如果你不让我知道什么是错的,我无法修复它,@Downvoter – FirstOne

+0

我的主要问题是如何动态地建立值,将数组中的引号从字符串中删除? – Chris

+0

@Chris我建议你不要在第一位添加引号( FirstOne