gpt4 book ai didi

sql - sql查询中的 "?"是什么意思?

转载 作者:行者123 更新时间:2023-12-02 06:17:53 25 4
gpt4 key购买 nike

我刚得到一个查询代码:

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;

}

最佳答案

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

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

然后你像这样执行它:
$res = $sth->execute( array( 'active', $language_id ) );

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

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

关于sql - sql查询中的 "?"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21571728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com