使用 PHP 和 mysqli 从多个 MySQL 表中获取数据

Posted

技术标签:

【中文标题】使用 PHP 和 mysqli 从多个 MySQL 表中获取数据【英文标题】:Getting Data From Multiple MySQL Tables Using PHP and mysqli 【发布时间】:2014-09-19 07:41:35 【问题描述】:

我正在尝试从已建立索引以相互关联的多个表中提取数据。我在 mysqlWorkbench 中运行了这个查询,它运行成功。但是,当我尝试运行 php 测试时,什么都没有出现,甚至第一个字段也没有。这是我的代码:

<?php
$db = new mysqli('host', 'user', 'password', 'database');

if (mysqli_connect_errno()) 
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();

$query = "
    SELECT 
        `Contact`.`firstName`,
        `Contact`.`lastName`,
        `ssn`.`ssn`,
        `Contact`.`country`,
        `Allergies`.`allergy`,
        `Allergies`.`allergyType`,
        `Allergies_Contact`.`allergyNotes`,
        `CurrentPrescriptions`.`prescriptionName`,
        `CurrentPrescriptions`.`prescribedDate`,
        `BloodType`.`bloodType`
    FROM
        `database`.`Contact`,
        `database`.`Allergies_Contact`,
        `database`.`Allergies`,
        `database`.`ssn`,
        `database`.`CurrentPrescriptions`,
        `database`.`BloodType`
    WHERE
        `Contact`.`contactKey` = `Allergies_Contact`.`contactKey`
            AND `Allergies`.`allergiesKey` = `Allergies_Contact`.`allergiesKey`
            AND `ssn`.`contactKey` = `Contact`.`contactKey`
            AND `CurrentPrescriptions`.`contactKey` = `Contact`.`contactKey`
            AND `BloodType`.`contactKey` = `Contact`.`contactKey`;
";

$result = $db->query($query) or die($db->error.__LINE__);
if ($result = mysqli_query($db, $query)) 
    while ($row = mysqli_fetch_row($result)) 
        print(row[0]);
    
    mysqli_free_result($result);

mysqli_close($db);
?>

请告诉我我在这里做错了什么,因为我可以看到它的格式正确。

【问题讨论】:

要从不同的表中获取数据,您应该使用 SQL 连接。它非常方便,专为这种情况而设计。 See here print(row[0]); 应该是print($row[0]);,除非缺少的$ 只是这里的复制/粘贴问题?另外,为什么要查询2次-> $result = $db-&gt;query($query) && $result = mysqli_query($db, $query) 我希望我能接受您的评论作为答案,因为就是这样 【参考方案1】:

几件事:

1.- 你有两个query 句子,改变:

$result = $db->query($query) or die($db->error.__LINE__);
if ($result = mysqli_query($db, $query)) 

有了这个

$result = $db->query($query) or die($db->error.__LINE__);
if ($result !== false) 

2.- 尝试打印变量时出现错误,更改:

while ($row = mysqli_fetch_row($result)) 
    print(row[0]);

有了这个

while ($row = mysqli_fetch_row($result)) 
    print($row[0]); // You missed a $

【讨论】:

【参考方案2】:
<?php
//conection:
$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link));

//consultation:

$query = "SELECT name FROM mytable" or die("Error in the consult.." . mysqli_error($link));

//execute the query.

$result = $link->query($query);

//display information:

while($row = mysqli_fetch_array($result)) 
  echo $row["name"] . "<br>";

?> 

http://php.net/manual/en/function.mysqli-connect.php

【讨论】:

以上是关于使用 PHP 和 mysqli 从多个 MySQL 表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

使用“mysql_fetch_row”从数据库中检索结果并使用 PHP 和 mysqli 插入数组?

PHP从mysql *迁移到mysqli [重复]

PDO PDO_MYSQL MYSQLI MYSQL 的区别

php中mysql和mysqli的总结

php中的mysql和mysqli的总结

php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例