2011-08-29 53 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()的第二个参数中的值,即相同的接口)。