Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 如何多次使用mysql查询_Php_Mysql - Fatal编程技术网

Php 如何多次使用mysql查询

Php 如何多次使用mysql查询,php,mysql,Php,Mysql,我在for循环中有这个select菜单,因此查询运行了多次。还有很多这样的查询,所以页面加载速度非常慢 <div class="col-md-4"> <label for="edit_kwaliteit_id['.$i.']">Kwaliteit</label> <div class="form-group input-group has-success has-feedback" id="edit_kwaliteit_id_div['.

我在for循环中有这个select菜单,因此查询运行了多次。还有很多这样的查询,所以页面加载速度非常慢

<div class="col-md-4">
    <label for="edit_kwaliteit_id['.$i.']">Kwaliteit</label>
    <div class="form-group input-group has-success has-feedback" id="edit_kwaliteit_id_div['.$i.']">
        <span class="input-group-addon"><span style="display: inline-block; width:15px; text-align:center;" class="fab fa-squarespace" aria-hidden="true"></span></span>

          <select class="form-control" id="edit_kwaliteit_id['.$i.']" name="edit_kwaliteit_id" onchange="validate_edit_table_1(this, '.$i.')">';

              $sql_kwal = "SELECT
                            id,
                            kwaliteit
                            FROM kwaliteit
                            ORDER BY kwaliteit ASC
                            ";

                if(!$res_kwal = mysqli_query($mysqli, $sql_kwal)) { echo '<div class="alert alert-danger text-center" role="alert">Er is helaas iets fout gegaan.</div>'; }

                while($row_kwal = mysqli_fetch_array($res_kwal)) {

                    echo '<option ';if($row_table_1['kwaliteit_id'] == $row_kwal['id']) { echo 'selected="selected"';} echo 'value="'.$row_kwal['id'].'">'.$row_kwal['kwaliteit'].'</option>';
                }
                echo '
          </select>

        <span class="glyphicon glyphicon-ok form-control-feedback" id="edit_kwaliteit_id_glyp['.$i.']"></span>
    </div>
</div>

夸利特
';
$sql\u kwal=“选择
身份证件
夸利特
来自夸利特
kwaliteit ASC订购
";
如果(!$res_kwal=mysqli_query($mysqli,$sql_kwal)){echo'Er是helaas iets fout gegaan.;}
while($row\u kwal=mysqli\u fetch\u数组($res\u kwal)){
回声“.$row_kwal['kwaliteit']”;
}
回声'
因为每次查询都是相同的,所以我想将查询移出循环,并将查询本身放在循环之前。 差不多

<?php
// some code
$sql_kwal = "SELECT
            id,
            kwaliteit
            FROM kwaliteit
            ORDER BY kwaliteit ASC
            ";

if(!$res_kwal = mysqli_query($mysqli, $sql_kwal)) { echo '<div class="alert alert-danger text-center" role="alert">Er is helaas iets fout gegaan.</div>'; }

// start loop

<div class="col-md-4">
    <label for="edit_kwaliteit_id['.$i.']">Kwaliteit</label>
    <div class="form-group input-group has-success has-feedback" id="edit_kwaliteit_id_div['.$i.']">
        <span class="input-group-addon"><span style="display: inline-block; width:15px; text-align:center;" class="fab fa-squarespace" aria-hidden="true"></span></span>

          <select class="form-control" id="edit_kwaliteit_id['.$i.']" name="edit_kwaliteit_id" onchange="validate_edit_table_1(this, '.$i.')">';

                while($row_kwal = mysqli_fetch_array($res_kwal)) {

                    echo '<option ';if($row_table_1['kwaliteit_id'] == $row_kwal['id']) { echo 'selected="selected"';} echo 'value="'.$row_kwal['id'].'">'.$row_kwal['kwaliteit'].'</option>';
                }
                echo '
          </select>

        <span class="glyphicon glyphicon-ok form-control-feedback" id="edit_kwaliteit_id_glyp['.$i.']"></span>
    </div>
</div>

// end loop
?>

您应该在第一次运行查询时将所有行读入一个数组,然后在
for
循环中迭代该数组,例如

$sql_kwal = "SELECT
            id,
            kwaliteit
            FROM kwaliteit
            ORDER BY kwaliteit ASC
            ";

if(!$res_kwal = mysqli_query($mysqli, $sql_kwal)) { echo '<div class="alert alert-danger text-center" role="alert">Er is helaas iets fout gegaan.</div>'; }
$rows = array();
while ($row = mysqli_fetch_array($res_kwal)) {
    $rows[] = $row;
}

请注意,如果安装了MySQL本机驱动程序(
mysqlnd
),则可以使用

$rows = mysqli_fetch_all(MYSQLI_BOTH);
代替
while
循环加载
$rows
数组

注意

如果有一个特别大的结果集无法加载到内存中,则可以在开始读取结果集之前使用重置数据指针。那么你在哪里

while ($row = mysqli_fetch_array($res_kwal)) {
换成

mysqli_data_seek($res_kwal, 0);
while ($row = mysqli_fetch_array($res_kwal)) {

您应该在第一次运行查询时将所有行读入一个数组,然后在
for
循环中迭代该数组,例如

$sql_kwal = "SELECT
            id,
            kwaliteit
            FROM kwaliteit
            ORDER BY kwaliteit ASC
            ";

if(!$res_kwal = mysqli_query($mysqli, $sql_kwal)) { echo '<div class="alert alert-danger text-center" role="alert">Er is helaas iets fout gegaan.</div>'; }
$rows = array();
while ($row = mysqli_fetch_array($res_kwal)) {
    $rows[] = $row;
}

请注意,如果安装了MySQL本机驱动程序(
mysqlnd
),则可以使用

$rows = mysqli_fetch_all(MYSQLI_BOTH);
代替
while
循环加载
$rows
数组

注意

如果有一个特别大的结果集无法加载到内存中,则可以在开始读取结果集之前使用重置数据指针。那么你在哪里

while ($row = mysqli_fetch_array($res_kwal)) {
换成

mysqli_data_seek($res_kwal, 0);
while ($row = mysqli_fetch_array($res_kwal)) {

您在这里提供的代码似乎缺少外循环,因此我将使用现有的代码

如果这个循环真的减慢了你的页面,你应该考虑使用Ajax来加载页面加载后的菜单内容,例如:

<select class="form-control" id="edit_kwaliteit_id['.$i.']" name="edit_kwaliteit_id" onchange="validate_edit_table_1(this, '.$i.')">';

     // add a loader while page loads
     <div id="menu-loader"></div>
</select>
Php端点:

// do your query
....
// loop through the result and build your menu
ob_start();
while($row_kwal = mysqli_fetch_array($res_kwal)) {

                echo '<option ';if($row_table_1['kwaliteit_id'] == $row_kwal['id']) { echo 'selected="selected"';} echo 'value="'.$row_kwal['id'].'">'.$row_kwal['kwaliteit'].'</option>';
            }
$output = ob_get_contents();
ob_end_clean();

echo json_endcode($output); exit();
//执行查询
....
//循环浏览结果并构建菜单
ob_start();
while($row\u kwal=mysqli\u fetch\u数组($res\u kwal)){
回声“.$row_kwal['kwaliteit']”;
}
$output=ob_get_contents();
ob_end_clean();
echo json_endcode($output);退出();

您在这里提供的代码似乎缺少外部循环,因此我将使用现有的代码

如果这个循环真的减慢了你的页面,你应该考虑使用Ajax来加载页面加载后的菜单内容,例如:

<select class="form-control" id="edit_kwaliteit_id['.$i.']" name="edit_kwaliteit_id" onchange="validate_edit_table_1(this, '.$i.')">';

     // add a loader while page loads
     <div id="menu-loader"></div>
</select>
Php端点:

// do your query
....
// loop through the result and build your menu
ob_start();
while($row_kwal = mysqli_fetch_array($res_kwal)) {

                echo '<option ';if($row_table_1['kwaliteit_id'] == $row_kwal['id']) { echo 'selected="selected"';} echo 'value="'.$row_kwal['id'].'">'.$row_kwal['kwaliteit'].'</option>';
            }
$output = ob_get_contents();
ob_end_clean();

echo json_endcode($output); exit();
//执行查询
....
//循环浏览结果并构建菜单
ob_start();
while($row\u kwal=mysqli\u fetch\u数组($res\u kwal)){
回声“.$row_kwal['kwaliteit']”;
}
$output=ob_get_contents();
ob_end_clean();
echo json_endcode($output);退出();

可能是范围问题。尝试将
if(!$res\u kwal=mysqli\u查询($mysqli,$sql\u kwal)){…
更改为
res\u kwal=mysqli\u查询($mysqli,$sql\u kwal);if(!$res\u kwal){…
可能是一个范围问题。尝试将
if(!$res kwal=mysqli\u查询($mysqli,$sql\u kwal)){…
更改为
res{…
在不加载到数组的情况下对每一行进行迭代不是更好吗?这样,您就不会在大型结果集上遇到问题。我看不到查询中的限制…@JamieBelcher,因为我理解OPs问题,他多次执行同一查询,这很慢。其目的是获取一次数据,然后再执行一次查询n在第一次使用后,每次需要时都从数组中读取它。@JamieBelcher我已经添加了一个备用解决方案,如果结果集的大小有问题,可以使用
mysqli\u data\u seek
。考虑到它正被用来进行
选择,我认为这不太可能,但拥有选项也无妨。非常非常好:)@Muiter:-)我“我很高兴你喜欢它。在不加载到数组的情况下对每一行进行迭代不是更好吗?这样你就不会在大型结果集上遇到问题。我看不到查询中的限制…@JamieBelcher,因为我理解他多次执行同一查询,这很慢。这样做的目的是一次获取数据。”e,然后在第一次需要时从数组中读取它。@JamieBelcher我已经添加了一个替代解决方案,如果结果集的大小有问题,可以使用
mysqli\u data\u seek
。考虑到它被用来进行
选择,我认为这不太可能,但拥有选项并没有坏处。非常非常好:)@Mui特:-)我很高兴你喜欢它。