Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在活动行数组内执行查询_Php_Mysqli - Fatal编程技术网

Php 在活动行数组内执行查询

Php 在活动行数组内执行查询,php,mysqli,Php,Mysqli,基本上,我使用的是我在网上找到的mySQLi包装器,在尝试使用它时,我遇到了一个我看不到的问题,基本上,我正在执行这个 <?php $res = $DB->Query("SELECT * FROM `table`"); while($row = $DB->Fetch()) { ?> <tr> <td><?php echo $row['id']; ?></td> <td><?

基本上,我使用的是我在网上找到的mySQLi包装器,在尝试使用它时,我遇到了一个我看不到的问题,基本上,我正在执行这个

<?php 
    $res = $DB->Query("SELECT * FROM `table`");
    while($row = $DB->Fetch()) {
?>
<tr>
    <td><?php echo $row['id']; ?></td>
    <td><?php echo $functions->checkStatus($row['arowhere']); ?></td>
</tr>
<?php 
      }
?>

有没有解决方案,或者有人给我指出正确的方向,这样我就可以避免这种情况了。

您可以遍历这些行,并将它们添加到临时数组中。然后,在进行其他查询之后,可以通过该数组引用行。如果查询返回的行太多,这可能会影响内存,因此请小心

<?php 
$res = $DB->Query("SELECT * FROM `table`");

$rows = array();
while($row = $DB->Fetch()) {
    array_push( $rows, $row );
}

foreach( $rows as $row ){
?>
    <tr>
        <td><?php echo $row['id']; ?></td>
        <td><?php echo $functions->checkStatus($row['arowhere']); ?></td>
    </tr>
<?php 
}
unset( $rows ); // destroys the temporary array, freeing the memory it consumed
?>

我不敢相信这样的包装能在网上找到。事实上,它是完全的,最终无法使用。

执行
mysqli->real\u escape\u字符串($SQL)毫无意义。它不会保护您的查询不被注入,但会破坏任何复杂的查询。只要您尝试使用WHERE条件运行查询,它就会因错误而失效

下面这句话也错了

die('Problem with Query: ' . $this->SQL);
因为它既不显示错误,也不显示文件和行号

至少这个包装器的问题是您所面临的——它使用内部变量来保存结果,而它应该返回它

,它允许您通过占位符添加任何动态数据

使用SafeMysql,您的代码可以工作:

<?php 
    $res = $DB->query("SELECT * FROM `table`");
    while($row = $db->fetch($res)) {
?>
<tr>
    <td><?php echo $row['id']; ?></td>
    <td><?php echo $functions->checkStatus($row['arowhere']); ?></td>
</tr>
<?php 
      }
?>


是的,不要使用这样的包装。。绝对没有理由使用它,简单的PDO/MySQLi对象也可以这样做,而不会带来所有麻烦。@dbf所以你建议我重新编写完整的应用程序?我建议不要使用开销;)如果它涉及重新编码您的应用程序,那么这取决于您。只需写一点参考指南。本例的一个小代码和包装器类,以及一个仅包含纯mysqli功能的示例。如果包装器类没有增加任何优点(但是缺点),那么您知道自己的选择;)你不能用一个
JOIN
通过一个查询获取所有值吗?@CurtisCrewe我认为你选择使用这个包装器是为了写更少的代码,对吗?我认为包装器类对数据库连接使用单例方法?
<?php 
    $res = $DB->query("SELECT * FROM `table`");
    while($row = $db->fetch($res)) {
?>
<tr>
    <td><?php echo $row['id']; ?></td>
    <td><?php echo $functions->checkStatus($row['arowhere']); ?></td>
</tr>
<?php 
      }
?>