2011-03-18 173 views
-2

當我嘗試執行更新語句我得到了以下錯誤:Erreur:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;

Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Issy-les-Moulineaux ' where ssiphone_idstation=46' at line 1 

我的更新語句是:

$bdd->exec("update ssiphone_stationdeservice set $cle='$element' where ssiphone_idstation=$id"); 

這是在PHP代碼,THX在您的幫助:)

$ CLE和$元素都在陣,我的代碼是:

foreach($table1 as $cle => $element) 
    { 
    $bdd->exec("update ssiphone_stationdeservice set $cle='$element' where ssiphone_idstation=$id"); 
    } 

現在表1是包含我的表和它的值的列名的數組:

$table1=array(); 
    $table1['ssiphone_etatstation']=$etat; 
    $table1['ssiphone_commerce']=$commerce; 
    $table1['ssiphone_stationdelavage']=$lavage; 
    $table1['ssiphone_typescarburants']=$lescarburants; 
    $table1['ssiphone_joursdelasemaine']=$jourssemaines; 
    $table1['ssiphone_horaires ']=$this->horaires; 
    $table1['ssiphone_telephone ']=$telephone; 
    $table1['ssiphone_sensdecirculation ']=$this->sensDeCirculation; 
    $table1['ssiphone_adresse ']=$this->adresse; 
    $table1['ssiphone_ville']=$this->ville; 
    $table1['ssiphone_departement']=$this->departement; 
    $table1['ssiphone_nomstation ']=$this->nomStation; 
+0

您是否爲'$ cle','$ element'和'$ id'設置了值? – 2011-03-18 14:17:17

+0

沒有'$ cle','$ element'和'$ id'的值,很難說。我衷心希望你能夠非常全面地驗證這些輸入--SQL注入就在角落。 – Mat 2011-03-18 14:18:18

+0

列名不能在其名稱中包含'-'標誌。您的查詢設計錯誤。 – Furicane 2011-03-18 14:20:41

回答

1

最有可能你的$ CLE變量沒有設置,使得查詢的樣子:

... set ='Issy-les-moulineaux ' where ... 

評論隨訪:

更改您的代碼看起來像這樣的話:

$query = "update ssiphone_stationdeservice set $cle='$element' where ssiphone_idstation=$id"; 
$result = $bdd->exec($query); 
if ($result === FALSE) { 
    print_r($bdd->errorInfo()); 
    die("Query: " . $query); 
} 

這樣你就可以檢查一個變量中的完整查詢字符串(例如,通過回聲)。很明顯,查詢有問題 - 但是mysql錯誤字符串不顯示整個查詢,所以你必須採取措施來捕獲它。

+0

我沒有理解你的答案,我的值不是手動插入,而是通過一個數組,所以我沒有任何介入時執行語句:) – Malloc 2011-03-18 14:41:42

+0

嗨,我認爲問題是從一個已存在的地址包含'caracter,我的問題是如何防止這種情況時,在數據庫中的表示,thx :) – Malloc 2011-03-18 14:56:39

+0

您正在使用PDO,所以看看使用預準備語句和綁定參數:http://ca3.php.net/manual/en/pdo.prepare.php。那些處理任何SQL元字符如'''。如果您使用的是像mysql/mysqli函數這樣的osmething,您可以使用mysql(i)_real_escape_string()函數手動執行相同的操作。 – 2011-03-18 14:58:38

相關問題