2011-08-29 31 views
1

我需要做的這個查詢文本:查詢問題,用單引號

SELECT * FROM brands WHERE brand =`l'artigiano italiano` 

應該是很簡單,但它不工作。 如同我所有的問題我嘗試用下面的代碼

$myDB = Database::getConnection($target='....',$key='....'); 

$sqlLogo = 'SELECT * FROM brands WHERE brand =`' . $brand->merk . '`'; 
$resultLogo = $myDB->query($sqlLogo); 

來執行它。當我打開網頁我收到以下錯誤

PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'l'artigiano italiano' in 'where clause': SELECT * FROM brands WHERE brand =`l'artigiano italiano`; Array () in merken_admin_settings() (line 23 of /home/mediaspe/domains/mediaspex.be/public_html/juniorsteps/sites/all/modules/merken/merken.admin.inc) 

我試圖用

WHERE brand = "..." 

WHERE brand = `...` 

但都沒有工作。

有關可能原因的任何建議?我目前正在盯住代碼。

+0

您已經被SQL注入泄漏咬傷。請參閱:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan

回答

4

你應該逃避任何你在SQL查詢中嵌入。當您使用的PDO,你應該$myDB->quote()做到這一點:

$sqlLogo = "SELECT * FROM brands WHERE brand = '" . $myDB->quote($brand->merk) . "'"; 

可以用於封閉你的價值觀同時使用雙引號(")和單引號('),而不是反引號(')。

它甚至更好地使用prepared statements

$stmt = $myDB->prepare("SELECT * FROM brands WHERE brand = :brand"); 
$resultLogo = $stmt->execute(array('brand' => $brand->merk)); 

這樣,您就不必採取逃避的照顧。

+0

thx這工作! –

0

您是否試過轉義單引號?

"l\'artigiano italiano" 

MySQL String Syntax

+0

該值來自數據庫的問題,它不是一個固定值。 但我覺得奇怪的是,當我複製粘貼錯誤查詢到MySQL,查詢工作。但PHP不想執行它 –

+0

thx逃脫報價工作! –

0

儘管所有其他答案對於常規mysql_ *函數都是有效的,但如果您使用的是PDO,則應該利用prepared statements。他們是爲了這個目的而製造的。

0

只是逃避單引號可以做的伎倆,但嘗試PDO準備語句,它們可以幫助您提供安全太(爲already discussed here
你可以這樣說:

$brand = "l'artigiano italiano"; 
$stmt = $db->prepare('SELECT * FROM brands WHERE brand = :brand'); 
$stmt->execute(array(':brand' => $brand)); 
0

它看起來像你'使用Drupal。如果這是這樣(我從你的數據庫連接,明顯標籤的方式承擔如此),你應該執行您的查詢是這樣的:

$result = db_query('SELECT * FROM {brands} WHERE brand = :brand', array(':brand' => $brand)); 

這就是全部。注:

  • 使用db_query(),它將在內部調用Database :: getConnection()。如果你想連接到另一個連接,你只需要自己調用Database :: getConnection()。

  • 對於由Drupal管理的表(使用模塊的hook_schema()安裝的表),使用uf大括號({})。如果這是一個與Drupal安裝無關的外部表格,則不需要這些。如果drupal安裝配置了一個(例如運行測試時的情況),大括號可確保插入正確的表名前綴

  • 您可以將:placeholder語法用於動態值,並直接指定db_query()(或$ myMD-> query()的第二個參數中的值,即相同的接口)。