2016-07-29 91 views
1

我可以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

回答

-1

你必須做這樣的事情:

// ..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

相關問題