php 的 mysqli_multi_query 不工作

Posted

技术标签:

【中文标题】php 的 mysqli_multi_query 不工作【英文标题】:php's mysqli_multi_query not working 【发布时间】:2016-02-23 05:19:12 【问题描述】:

我一直在尝试执行多个查询,因此我已经搜索了如何执行此操作的更好方法,并且我在 php.ini 中阅读了此 mysqli_multi_query

我自己尝试了它以查看结果,但它一直给我错误。代码如下:

$studid = $_GET['stud_id'];
$classcode = $_GET['class'];

$conn = new mysqli($host, $username, $password, $dbname) or die('Can not connect to database');     

$sql = "SELECT * FROM tbl_students WHERE stud_id = '".$studid."'";
$sql.= "SELECT * FROM tbl_classes WHERE class_code = '".$classcode."'";

if (mysqli_multi_query($conn, $sql)) 
    do 
        /* store first result set */
        if ($result = mysqli_store_result($conn)) 
            while ($row = mysqli_fetch_row($result)) 
                $studname = $row[3].", ".$row[1];

            
            mysqli_free_result($result);
        
        /* print divider */
        if (mysqli_more_results($conn)) 
            printf("-----------------\n");
            $studname = $row['fname'];
        
     while (mysqli_more_results($conn));
else echo "error";

$conn->close();

使用上面的代码,它只会打印我设置的 else 语句中的错误。我还尝试将第二个查询更改为$sql .= "SELECT * FROM tbl_classes WHERE class_code = '".$classcode."'"; 并尝试在第一个查询之后放置分号以告诉 SQL 我已完成第一个查询,因为我将两个字符串放在一起,但仍然没有运气。

【问题讨论】:

你需要在查询中加一个分号 @Dagon 正如我上面所说的,我已经尝试过了。我试过这样$sql = "SELECT * FROM tbl_students WHERE stud_id = '".$studid."';"; 但它会一直加载下去。 坦率地说,10 年来我从未使用过 MySQL multi @Dagon 那么我该如何以不同的方式执行它呢? 你能检查一下:$sql = "SELECT * FROM tbl_students WHERE stud_id="."'".$studid."';"; --- 如果这也不起作用,请尝试使用 bind param 【参考方案1】:

试试这个

$studid = $_GET['stud_id'];
$classcode = $_GET['class'];

$conn = new MySQLi($host, $username, $password, $dbname) or die('Can not connect to database');     

$sql = "SELECT * FROM tbl_students WHERE stud_id = '$studid';";
$sql.= "SELECT * FROM tbl_classes WHERE class_code = '$classcode'";

if ($conn->multi_query($sql)) 
    do 
        /* store first result set */
        if ($result = mysqli_store_result($conn)) 
            while ($row = mysqli_fetch_row($result)) 
                $studname = $row[3].", ".$row[1];

            
            mysqli_free_result($result);
        
        /* print divider */
        if (mysqli_more_results($conn)) 
            printf("-----------------\n");
            $studname = $row['fname'];
        
     while (mysqli_more_results($conn));
else echo "error";

$conn->close();

【讨论】:

它将永远加载。内容不会显示。 条件为真 如果我在第一个查询中删除分号,它工作正常。但是当我放它时,它会不停地加载。 检查你的结果变量【参考方案2】:

进行一次查询而不是两次:

"SELECT ts.*, tc.* 
FROM tbl_students as ts, tbl_classes as tc 
WHERE ts.stud_id = '$studid' 
AND tc.class_code = '$classcode'"

注意:如果您获得冗余数据,请使用 group by。

【讨论】:

以上是关于php 的 mysqli_multi_query 不工作的主要内容,如果未能解决你的问题,请参考以下文章

sql无法通过mysqli_multi_query执行

如果不使用 mysqli_multi_query,SQL 注入将无法工作

sqli-labs(41) and 两php函数的讲解

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令

SQL——注入攻击——mysqli_multi_query()的使用

mysqli_multi_query数组问题