簡體   English   中英

INSERT語句不適用於PDO

[英]INSERT statement does not work with PDO

編輯:PDO列名稱Unité的法語字符似乎有問題。 有解決方案嗎,還是我需要重命名數據庫中的列?

SELECT語句與PDO一起使用,但INSERT語句不起作用。

連接字符串:

$dbCon = new PDO("mysql:host=".$host.";dbname=".$dbName.";charset=utf8", $username, $password);

工作的SELECT語句:

$sql = 'SELECT * FROM availability WHERE event_id=:postID';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$result = $stmt->fetchAll();

無法運行的INSERT語句:

$sql = 'INSERT INTO `availability` (`event_id`,`Nom`,`Address`,`Address2`,`Tel1`,`Tel2`,`Tel3`,`Classement`,`Soleil`,`Unité`,`Dispo`,`Ville`,`Type`,`URL`,`Jour1`,`Jour2`,`Jour3`,`Jour4`,`Jour5`,`Jour6`,`Jour7`,`Jour8`,`Jour9`,`Jour10`,`Jour11`,`Jour12`,`Jour13`,`Jour14`,`Jour15`,`visible`) (SELECT :postID,`Nom`,`Address`,`Address2`,`Tel1`,`Tel2`,`Tel3`,`Classement`,`Soleil`,`Unité`,`Dispo`,`Ville`,`Type`,`URL`,`Jour1`,`Jour2`,`Jour3`,`Jour4`,`Jour5`,`Jour6`,`Jour7`,`Jour8`,`Jour9`,`Jour10`,`Jour11`,`Jour12`,`Jour13`,`Jour14`,`Jour15`,`visible` FROM `default_hotels`)';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$result = $stmt->fetchAll();

另一個有效的SELECT語句:

$sql = 'SELECT post_title FROM wp_posts WHERE id=:postID';
$stmt = $dbCon->prepare($sql);
$stmt->execute(array(':postID'=>$postID));
$records = $stmt->fetchAll();

所有語句均按此順序出現在我的腳本中。 變量將被重新使用且不會被清除。

通過phpmyadmin而不是PDO提交時,我提供的SQL INSERT語句有效。

PHP 5.3.6開始支持連接字符串中的PDO charset參數。 在此之前,它什么也沒做。 因此,問題在於與數據庫的連接實際上不是在utf8中運行,而是可能在latin1中運行。 因此,PHP和MySQL中列名的編碼不匹配,因此MySQL會誤解列名,因此找不到您要的列。

有關指定連接編碼,升級PHP版本或僅對列名使用ASCII的替代方法,請參見https://stackoverflow.com/a/279279/476 (無論如何,這是一個好主意,特別是因為這會引起兼容性問題)這樣的問題就更少了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM