我需要做这个查询:
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 = `...`
但两者都不起作用
对可能的原因有什么建议吗?
应该转义SQL查询中嵌入的任何内容。当您使用PDO时,您应该使用$myDB->quote()
:
$sqlLogo = "SELECT * FROM brands WHERE brand = '" . $myDB->quote($brand->merk) . "'";
您可以使用双引号("
)和单引号('
)来封闭您的值,但不能使用反引号(')。
最好使用预处理语句:
$stmt = $myDB->prepare("SELECT * FROM brands WHERE brand = :brand");
$resultLogo = $stmt->execute(array('brand' => $brand->merk));
您试过转义单引号吗?
"l''artigiano italiano"
MySQL字符串语法
虽然所有其他答案都对常规的mysql_*函数有效,但如果您使用PDO,则应该利用准备好的语句。
只是转义单引号可以做到这一点,但尝试PDO预处理语句,它们也可以帮助您提高安全性(正如这里已经讨论过的)
你可以这样做:
$brand = "l'artigiano italiano";
$stmt = $db->prepare('SELECT * FROM brands WHERE brand = :brand');
$stmt->execute( array(':brand' => $brand) );
看起来您正在使用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安装配置了正确的表名前缀的情况下(例如运行测试时的情况!)
动态值可以使用:占位符语法,并直接在db_query()的第二个参数中指定值(或$myMD->query(),这是相同的接口)。