所以,我有这样的PHP代码:我不明白“?”这里正在使用
$tabid = getTabid($module);
if($tabid==9)
$tabid="9,16";
$sql = "select * from field ";
$sql.= " where field.tabid in(?) and";
现在,这里究竟怎样的?
工作?我隐约明白,在PHP中,?:
是一个三元运算符,但冒号不在此处使用,?
也是Postgresql查询的一部分。
最后的查询看起来有点像这样:
select * from field where field.tabid in('9,16')
因此,问号是由$ tabid内容所取代,那怎么发生的呢?
问题是('9,16')
不被Postgres接受为一个整数,它需要写成像(9,16)
,所以我该怎么做?我如何删除撇号?
非常感谢您的帮助,有一个美好的一天!
编辑:请求更多代码:
$sql.= " field.displaytype in (1,2,3) and field.presence in (0,2)";
其次,如果陈述,我认为这是有关的一个:
if($tabid == 9 || $tabid==16)
{
$sql.= " and field.fieldname not in('notime','duration_minutes','duration_hours')";
}
$sql.= " group by field.fieldlabel order by block,sequence";
$params = array($tabid);
//Running the query.
$result = $adb->pquery($sql, $params);
哦,我想我现在明白了,我认为这是一个占位符,该pquery功能的一部分:这里
function pquery($sql, $params, $dieOnError=false, $msg='') {
Stuff
$sql = $this->convert2Sql($sql, $params);
}
现在,这是它似乎变得有趣,是的C的一部分onvert2Sql功能:
function convert2Sql($ps, $vals) {
for($index = 0; $index < count($vals); $index++) {
if(is_string($vals[$index])) {
if($vals[$index] == '') {
$vals[$index] = "NULL";
}
else {
$vals[$index] = "'".$this->sql_escape_string($vals[$index]). "'";
}
}
}
$sql = preg_replace_callback("/('[^']*')|(\"[^\"]*\")|([?])/", array(new PreparedQMark2SqlValue($vals),"call"), $ps);
return $sql;
}
我认为问题出在
$vals[$index] = "'".$this->sql_escape_string($vals[$index]). "'";
线。 sql_escape_string($str)
函数只是返回pg_escape_string($str)
。
对不起,超长的编辑,但我还是一直没能得到过去我很害怕,感谢所有帮助!
编辑2:我解决了这一问题,时采取了鲍勃迪伦$tabid = "9,16"
至$tabid = array(9,16)
。我不知道为什么,哦,我也不得不删除group by statement,因为Postgresql要求每个字段都放在该语句中。
你能告诉我们下面的代码吗?这是查询的占位符。 –
你使用ORM的一些亲戚?我们需要用于获取结果的代码..即command.RunQuery或其他代码以及其前面的代码。 – Baz1nga
请参见[关于SQL注入的维基百科文章中的参数化语句段落](http:// en。 wikipedia.org/wiki/SQL_injection#Parameterized_statements)和[维基百科有关Prepared Statements的文章](http://en.wikipedia.org/wiki/Prepared_statement)。 –