使用单引号查询问题

时间:2011-08-29 16:22:18

标签: php mysql drupal

我需要执行此查询:

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 = `...`

但两者都不起作用。

有关可能原因的任何建议?我此刻正盯着代码。

5 个答案:

答案 0 :(得分: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));

这样你就不用担心逃跑了。

答案 1 :(得分:0)

你试过逃避单引号吗?

"l\'artigiano italiano"

MySQL String Syntax

答案 2 :(得分:0)

虽然所有其他答案对常规mysql_ *函数都有效,但如果您使用的是PDO,则应该利用prepared statements。它们是为了这个目的而制作的。

答案 3 :(得分:0)

只是逃避单引号可以做到这一点,但尝试PDO准备好的语句,它们也可以帮助你安全(如already discussed here
你可以这样做:

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

答案 4 :(得分:0)

看起来你正在使用Drupal。如果是这样的话(我从你获得数据库连接的方式以及明显的标记中假设这样),你应该像这样执行你的查询:

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

这就是全部。注意:

  • 使用db_query(),它将在内部调用Database :: getConnection()。如果要连接到默认连接以外的其他连接,则只需要自己调用Database :: getConnection()。

  • 对Drupal管理的表使用uf花括号({})(表示通过模块的hook_schema()安装的表)。如果这是与Drupal安装无关的外部表,则不需要这些。花括号确保插入正确的表名前缀,以防drupal安装配置为一个(例如运行测试时的情况!)

  • 您可以使用:占位符语法来表示动态值,并直接在db_query()的第二个参数中指定值(或$ myMD-> query(),这是相同的接口)。