如何在使用mysqli_multi_query时使用mysqli_fetch_row

时间:2017-12-19 03:38:37

标签: php mysql mysqli-multi-query

我试图获取有关某个特定人员的最新信息,并且我正在使用像

这样的查询
SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID DESC LIMIT 1

SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID DESC LIMIT 1

因为在表中每天都会在更新它的时候为不同的人插入新数据(供记录参考),所以我想打印出几个人的最新信息,按照#34; ORDER BY ID DESC LIMIT 1"

我试图用" mysqli_multi_query"打印出来。和" mysqli_fetch_row"

喜欢

    $con=mysqli_connect($localhost,$username,$password,'Table');

    $sql = "SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID 
    DESC LIMIT 1 ";
    $sql .= "SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID 
    DESC LIMIT 1";

    // Execute multi query
if (mysqli_multi_query($con,$sql))
{
  do
    {
    // Store first result set
    if ($result=mysqli_store_result($con)) {
      // Fetch one and one row
      while ($row=mysqli_fetch_row($result))
        {
            echo '<tr>'; // printing table row
            echo '<td>'.$row[0].'</td>';
            echo '<td>'.$row[1].'</td>';
            echo '<td>'.$row[2].'</td>';
            echo '<td>'.$row[3].'</td>';
            echo '<td>'.$row[4].'</td>';
            echo '<td>'.$row[5].'</td>';
            echo '<td>'.$row[6].'</td>';
            echo '<td>'.$row[7].'</td>';
            echo '<td>'.$row[8].'</td>';
            echo '<td>'.$row[9].'</td>';
            echo '<td>'.$row[10].'</td>';
            echo '<td>'.$row[11].'</td>';
            echo '<td>'.$row[12].'</td>';
            echo '<td>'.$row[13].'</td>';
            echo '<td>'.$row[14].'</td>';
            echo'</tr>'; // closing table row
        }
      // Free result set
      mysqli_free_result($result);
      }
    }
  while (mysqli_next_result($con));
}

mysqli_close($con);

?>

在结果页面中,它不会显示任何错误消息,但不会打印任何结果。 个别查询已经过测试。

请指教,非常感谢

还有另一种方法可以保持查询简单,所以不需要使用mysqli_multi_query吗?

2 个答案:

答案 0 :(得分:1)

最佳做法表明,您应该始终尽力为数据库拨打最少数量的任务。

因此,JOIN查询是合适的。

SELECT A.* FROM test A INNER JOIN (SELECT name, MAX(id) AS id FROM test GROUP BY name) B ON A.name=B.name AND A.id=B.id WHERE A.name IN ('Peter','Mary')

这将在单个结果集中的一个查询中返回所需的行,然后可以迭代并显示它们。

这是一个sqlfiddle演示:http://sqlfiddle.com/#!9/2ff063/3

P.S。在搜索非变量值时,请勿使用LIKE。我的意思是,只有在逻辑上需要_%时才使用它。

答案 1 :(得分:0)

这应该适合你:

$con = mysqli_connect($localhost,$username,$password,'Table');


// Make a simple function
function personInfo($con, $sql)
{
    $result = mysqli_query($con, $sql);
    if(mysqli_num_rows($result) > 0)
    {
        while($row = mysqli_fetch_array($result))
        {
            echo '<table>
                  <tr>';
            for($i=0; $i < count($row); $i++) echo '<td>'.$row[$i].'</td>';
            echo '</tr>
                  </table>';
        }
    }
}


$sql1 = "SELECT * FROM Table WHERE Name='Peter' ORDER BY ID DESC LIMIT 1 ";
$sql2 = "SELECT * FROM Table WHERE Name='Mary' ORDER BY ID DESC LIMIT 1";


// Simply call the function
personInfo($con, $sql1);
personInfo($con, $sql2);