【发布时间】:2012-04-07 17:31:29
【问题描述】:
我编写了一个函数,它根据传递给函数的参数运行查询。
我似乎无法弄清楚为什么执行以下操作会返回结果:
function test($function_returned_array)
{
$variable = 'Hello World';
$sql = 'SELECT `name`, `pid`
FROM `products`
WHERE `name` IN (?)';
$found = $this->db->get_array($sql, $variable);
}
虽然这不会返回任何结果:
function test2($function_returned_array)
{
$sql = 'SELECT `name`, `pid`
FROM `products`
WHERE `name` IN (?)';
$found = $this->db->get_array($sql, $function_returned_array[0]);
}
$function_returned_array[0] 也等于“Hello World”。他们不应该返回相同的结果吗?
当我回显 $variable 和 $function_returned_array[0] 的值时,它们都是“Hello World”
这是我的 PDO 包装器的相关部分:
public function query(&$query, $params)
{
$sth = $this->_db->prepare($query);
if(is_null($params))
{
$sth->execute();
}
else if(is_array($params))
{
$sth->execute($params);
}
else
{
$sth->execute(array($params));
}
$this->_rows = $sth->rowCount();
$this->_counter++;
return $sth;
}
public function get_array(&$query, $params, $style = PDO::FETCH_ASSOC)
{
$q = $this->query($query, $params);
return $q->fetchAll($style);
}
我使用的是 PHP 5.3.5。
任何帮助将不胜感激。
【问题讨论】:
-
这段代码缺少调试。并要求陌生人在心理上对其进行调试。我会 -1 但不要这样做只是为了拥有一个 PDO 包装器 - 在这个“狂热程序员”网站上几乎从未见过这种东西
-
对不起,我认为它已经足够清楚了:(我会再编辑一下。
-
为什么要传递查询字符串作为参考?
-
为什么会有这么复杂的代码?为什么要使用函数?为什么通过数组成员传递标量变量的这种复杂方式?为什么你不能将你的 hello world 作为标量传递?
-
@YourCommonSense,以上是代码的精简版。查询更像是 WHERE
nameIN (?, ?, ?)'。传递给 query() 的参数是整个数组。