2013-08-22 182 views
-1
$what = "(999,'string','string2'),(21,'aaaa','bbbbb'),(22,'ccccc','ddddd')"; 
include("../connect/pdoconnect.php"); 
try { 

$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUE :what"); 
$sql->execute(array(":what"=>$what)); 


} 
catch(PDOException $e) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($db->errorInfo()); 
} 

$ get-data-from-csv-function的值是多少,所以我們不知道它有多少。 我自己試試,PDO不能做這個查詢。我該怎麼做?PDO如何執行此查詢?

+0

佔位符用於插入*值*,因此它們可以從代碼中正確分離。如果您使用它們來插入*代碼* PDO將*不*代碼處理它,因爲這正是它應該做的。 –

+0

如果您正在從某個地方的數組中生成$ what,那麼PDO準備好的語句應該是該數組循環的目標。 – Cups

+0

Bug修復。謝謝大家:) – crazyoxygen

回答

3

你不能用一個佔位符做到這一點。只有在允許普通表達式的情況下才允許佔位符,並且值列表不是一個表達式。

因此,您需要使用字符串插值/連接,如在Gautam3164的答案中,或者使用一次一圈插入單行的循環,例如,

$whats = array(array('userid' => 999, 'picturename' => 'string', 'picturepath' => 'string2'), 
       array('userid' => 21, 'picturename' => 'aaaa', 'picturepath' => 'bbbbb'), 
       array('userid' => 22, 'picturename' => 'ccccc', 'picturepath' => 'ddddd') 
      ); 
$sql = $db->prepare("INSERT INTO `bd_fortest` (`user_ID`, `picturename`, `picturepath`) VALUES (:userid, :picturename, :picturepath)"); 
foreach ($whats as $what) { 
    $sql->execute($what); 
} 

如果使用字符串連接,將失去對參數化語句的保護。您需要確保所有字符串都已正確清理或轉義。

+0

謝謝。我會嘗試:) – crazyoxygen

+0

@Batmar爲你+1 ...尼斯和 – Gautam3164

+0

嗯,我嘗試和它顯示致命錯誤:調用一個非對象的成員函數prepare()。 – crazyoxygen