我的网站相当广泛,而且我最近刚刚切换到 PHP5(请称我为大器晚成者)。
我之前的所有 MySQL 查询都是这样构建的:
"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";
这使得一切变得非常容易、简单和友好。
出于明显的安全原因,我现在正在尝试切换到 mysqli,并且我很难弄清楚如何实现相同的功能SELECT * FROM
查询时bind_param
需要具体的论据。
这种说法已经成为过去了吗?
如果是,我如何处理涉及大量列的查询?我真的需要每次都把它们全部打出来吗?
我可能是错的,但对于你的问题我有这样的感觉bind_param()
这并不是真正的问题。您总是需要定义一些条件,无论是直接在查询字符串本身中,还是使用bind_param()
设置?
占位符。这并不是一个真正的问题。
我在使用 MySQLi 时遇到的问题SELECT *
查询是bind_result()
部分。因此,只需使用get_result()
这更方便:
$result = $stmt->get_result();
$row = $result->fetch_assoc();
正如您所看到的,所有熟悉的获取函数都可以使用。
由于历史原因,以下是如何获取数组bind_result()
。这就是有趣的地方。我看到 Jeffrey Way 的这篇文章:http://jeff-way.com/2009/05/27/tricky-prepared-statements/(此链接不再有效)。该脚本基本上循环遍历结果并将它们作为数组返回 - 无需知道有多少列,并且您仍然可以使用准备好的语句。
在这种情况下,它看起来像这样:
$stmt = $mysqli->prepare(
'SELECT * FROM tablename WHERE field1 = ? AND field2 = ?');
$stmt->bind_param('ss', $value, $value2);
$stmt->execute();
然后使用该网站的片段:
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ($stmt->fetch()) {
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
And $results
现在包含来自的所有信息SELECT *
。到目前为止,我发现这是一个理想的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)