【发布时间】:2011-03-14 15:00:32
【问题描述】:
我正在尝试动态绑定 mysql_stmt 参数并在关联数组中获取结果。我在 stackoverflow 上找到了这篇文章,其中 Amber 使用以下代码发布了答案:
原帖: How to make a proper mysqli extension class with prepared statements?
“假设您实际上想要编写自己的版本(而不是利用其他答案建议的现有库之一 - 这些也是不错的选择)......
这里有几个函数,您可能会发现它们对检查很有用。第一个允许您将查询结果绑定到关联数组,第二个允许您传入两个数组,一个是有序的键数组,另一个是这些键的关联数据数组,并将该数据绑定到准备好的声明:"
function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
function stmt_bind_params($stmt, $fields, $data) {
// Dynamically build up the arguments for bind_param
$paramstr = '';
$params = array();
foreach($fields as $key)
{
if(is_float($data[$key]))
$paramstr .= 'd';
elseif(is_int($data[$key]))
$paramstr .= 'i';
else
$paramstr .= 's';
$params[] = $data[$key];
}
array_unshift($params, $stmt, $paramstr);
// and then call bind_param with the proper arguments
call_user_func_array('mysqli_stmt_bind_param', $params);
}
我尝试研究代码以了解它的作用,并且我已使第二个功能正常工作,但我不知道应该做什么才能使用第一个功能。如何使用它来检索类似于 mysqli_result::fetch_assoc() 的数组?
我希望能够像以前那样使用结果:
while ($row = mysql_fetch_array($result)){
echo $row['foo']." ".$row['bar'];
}
请帮助我在这方面取得一些进展:)
【问题讨论】:
-
说真的,没有一个答案?
-
我正在尝试做同样的事情。如果我弄清楚了,会发布答案。
标签: php dynamic prepared-statement sqlbindparameter