【问题标题】:What does it mean "?" in sql query?这是什么意思 ”?”在sql查询中?
【发布时间】:2014-02-05 16:22:10
【问题描述】:

我刚得到一个查询代码:

SELECT o.id,o.sort_order,od.object FROM i_objects o, i_objects_description od 
WHERE o.id=od.objects_id AND o.object_status = ? AND od.languages_id = ? 
ORDER BY o.sort_order ASC

我想弄清楚“?”是什么意思在这个查询中是什么意思? 如果我运行这个查询,它会给我这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? 

我正在使用PEAR,这是我的功能:

function getArrayObjects( $language_id )
    {

        $q = 'SELECT o.id,o.sort_order,od.object FROM ' . TABLE_OBJECTS . ' o, ' . TABLE_OBJECTS_DESCRIPTION . ' od ';
        $q.= 'WHERE o.id=od.objects_id AND o.object_status = ? AND od.languages_id = ? ';
        $q.= 'ORDER BY o.sort_order ASC';

        $sth = $this->_db->prepare( $q );

        $res = $sth->execute( array( 'active', $language_id ) );
        //var_dump($res);echo "<br>";echo "<br>";echo "<br>";
        $objects = array();
        while( $row = $res->fetchRow())
        {
            $objects[$row['id']] = $row;
        }

        return $objects;

    }

【问题讨论】:

  • @Sergio Tulentsev 你能说得更具体些吗?

标签: sql pear


【解决方案1】:

它是参数的占位符。在您的查询中,您有以下内容:

AND o.object_status = ? AND od.languages_id = ?

然后你像这样执行它:

$res = $sth->execute( array( 'active', $language_id ) );

所以,当数据库服务器实际执行查询时,object_status'active'language_id$language_id

这样做是为了防止 SQL 注入。另一个原因是效率。当您使用准备好的语句时,数据库不需要每次都解析/编译查询。它使用模板并仅替换其中的值。 (更多信息:Prepared statement

【讨论】:

  • 所以我们使用占位符来防止sql注入?这是唯一的角色?
  • @Chester 主要是,是的。也是为了效率。当您使用准备好的语句时,数据库不需要每次都重新编译查询。它使用模板并仅替换其中的值。
【解决方案2】:

? 是占位符,其值填入$sth-&gt;execute( array( 'active', $language_id ) ) 语句中。

此构造的主要目的之一是防止 sql 注入攻击

【讨论】:

    【解决方案3】:

    它是用来动态设置值的,也就是占位符

    【讨论】:

      【解决方案4】:

      这些是“参数化查询”。在评估“?”时被给定的值替换(称为绑定)。它们可以防止 sql 注入并优化查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 2015-06-08
        • 2011-05-26
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多