我需要执行此查询:
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 :(得分: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)
答案 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(),这是相同的接口)。