我有一個表單接受幾個名稱和電話號碼,並將它們發佈到PHP腳本,然後將這些值插入到MySQL表中。代碼(PHP)是非常簡單的,你可以在這裏看到:如何在MySQL的表單字段中接受撇號
$sql = "INSERT INTO Contact_table (PHONE, NAME) VALUES ";
for ($i = 0; $i < $arr; ++$i){
$sql .= "('".$numbers[$i]."', '".$names[$i]."'),";
}
$sql = substr($sql, 0, -1)." ON DUPLICATE KEY UPDATE name = COALESCE(VALUES(name), name);";
$connect = dbconn(PROJHOST,PROJDB,PROJDBUSER,PROJDBPWD);
$query = $connect->query($sql);
$connect = NULL;
這完美的作品,除了它拒絕接受像奧哈拉或杜澤任何名稱。我隱約意識到PDO準備好的聲明在這種情況下有一些用處,但我無法使其工作。我試過是這樣的:
$query = $connect->prepare($sql);
$query->execute();
取而代之的是:
$query = $connect->query($sql);
任何提示?我錯過了什麼?
不僅你的代碼不會像奧哈拉名工作,但它是一個巨大的安全漏洞,以及,是容易受到SQL注入。只需按照這裏的建議... http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers。 – zgguy
這就是確切的原因(當然也包括撇號問題)我非常喜歡使用準備好的語句,但它沒有幫助,因此在這裏。 – TheLearner
準備一個帶硬編碼參數值的SQL語句毫無意義...您需要像$ stmt = $ connect-> prepare('INSERT INTO Contact_table(PHONE,NAME)VALUES(?,?)ON DUPLICATE KEY UPDATE name = COALESCE(VALUES(name),name)');在循環之前,然後在循環中:$ stmt-> execute(array($ numbers [$ i],$ names [$ i])); – zgguy