【问题标题】:How to use $row results into mysqli_query?如何在 mysqli_query 中使用 $row 结果?
【发布时间】:2014-06-01 19:44:54
【问题描述】:

如何在 mysqli_query 中使用 $row 结果?

$result1 = mysqli_query($connect,"SELECT subcat_ID FROM subcategories WHERE cat_ID=$cat_ID");
$row=mysqli_fetch_array($result1);
$result2 = mysqli_query($connect,"SELECT subsubcat_name FROM subsubcategories WHERE subcat_ID='".$row['subcat_ID']."'");
while ($row = mysqli_fetch_array($result2)){
        if (isset($row)){
        echo $row['subsubcat_name'];
        echo "<br>";
        }

我没有收到任何错误,但我无法将其打印出来。

知道我做错了什么吗?

感谢您的帮助!

================================================ ====================================

第一次编辑

因为我的问题还没有解决,我再深入一点解释一下:

我的数据库: - 类别:cat_ID、cat_name - 子类别:subcat_ID、cat_ID、extra_cat_ID、subcat_name - 子类别:subsubcat_ID、subcat_ID、subsubcat_name

在某个时刻,我通过 url 获得 cat_ID(类别)的值。 我想要做的是类别的cat_id与子类别中的cat_id或extra_cat_ID的值相同(我也希望能够打印subcat_name),其中子类别的subcat_ID与子类别的subcat_ID相同--->打印subsubcat_name。

Categories
-------------------------
cat_ID | cat_name
------------------
4      | Baby & Kids
5      | Bicycles
6      | Boats
7      | Books & Comics
....
13     | Clothes & Accessories
....
35     | Sport & Fitness
36     | Study
....
38     | Toys & Games
....


Subcategories
-------------------------
subcat_ID | cat_ID | extra_cat_ID | subcat_name
------------------------------------------------
....
15        | 4      | 13           | Baby clothes
16        | 4      | 0            | Baby products
17        | 4      | 13           | Kids clothes
18        | 4      | 38           | Toys
19        | 5      | 0            | Bycicles
20        | 5      | 0            | Bycicle gear & Accessories
21        | 6      | 0            | Boat parts
22        | 6      | 0            | Other Boats
23        | 6      | 0            | Power Boats
24        | 6      | 0            | Sailboats
25        | 6      | 35           | Windsurf & Surfing
26        | 7      | 0            | Antiquarian
27        | 7      | 0            | Books
28        | 7      | 38           | Childrens books
29        | 7      | 0            | Comics
30        | 7      | 0            | Magazines & Newspapers
31        | 7      | 36           | Study & Training



Subsubcategories
-------------------------
subsubcat_ID | subcat_ID | subsubcat_name
-----------------------------------------
...
470          | 15        | Baptism outfits
471          | 15        | Bibs
472          | 15        | Body warmers
473          | 15        | Bodysuits
....
496          | 16        | Baby bath
497          | 16        | Baby books
498          | 16        | Baby inserts
499          | 16        | Baby monitors
....
548          | 17        | Belts
549          | 17        | Blouses & Shirts
550          | 17        | Body warmer
551          | 17        | Boots
....
....
740          | 26        | Music
741          | 26        | Navy
742          | 26        | Novel
743          | 26        | Photography
....
....
867          | 30        | Animals
868          | 30        | Arts and Culture
869          | 30        | Branch
870          | 30        | Cars
870          | 30        | Computers
....
....
etc.

我希望这能澄清一些事情。

【问题讨论】:

  • 您的第一个 WHERE 语句应该在 "
  • 另外,您不需要检查 $row 是否设置在 while ($row... 内,因为如果您在 while($row... 内,那么您就知道它已设置。也许你的意思是isset($row['subsubcat_name'])
  • 感谢您回复 rybo111。输入我的问题时,“是一个错字。抱歉。
  • 即使我使用 isset($row['subsubcat_name']) 它也没有显示任何内容。没有错误,没有输出。顺便说一句,感谢您提供有关检查 $row 是否已设置的提示。
  • 尝试将您的 SQL 查询设置为这样的变量:$sql = "SELECT... 然后回显它。然后在 phpMyAdmin 中运行该查询。它可能会在那里显示错误。

标签: php mysql mysqli row rows


【解决方案1】:

您应该使用JOIN,而不是运行两个查询。

例如这个$query

SELECT subcategories.cat_ID, subsubcategories.subsubcat_name
FROM subcategories
INNER JOIN subsubcategories
ON subcategories.cat_ID=subsubcategories.subcat_ID
WHERE subcategories.cat_ID = ?

在这种情况下,准备查询更合适/更安全:

/* create a prepared statement */
if ($result = mysqli_prepare($connect, $query)) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($result, "i", $cat_ID);

    /* execute query */
    mysqli_stmt_execute($result);

    /* fetch data */
    while ($row = mysqli_fetch_array($result)){
        if (isset($row)){
            echo $row['subsubcat_name'];
            echo "<br>";
        }
    }
 }

DEMO for SQL JOIN


搞定了。这是我使用的代码:

$result=mysqli_query($connect,"SELECT subcategories.cat_ID, subsubcategories.subsubcat_name FROM subcategories INNER JOIN subsubcategories ON subcategories.subcat_ID=subsubcategories.subcat_ID WHERE subcategories.cat_ID = $cat_ID OR subcategories.extra_cat_ID = $cat_ID");
while ($row = mysqli_fetch_array($result)){
        echo $row['subsubcat_name'];
            echo "<br>";
 }

虽然不确定这是安全的方法。随时欢迎提出建议。
感谢 meda 向我展示了另一种方法,但它不是完全相同的代码。

【讨论】:

  • 哦,太好了,谢谢!没有想到这种方法。今天晚上去测试一下。谢谢美达!
  • 好吧,这次你的意图回答“在问题的大方向上”是完全合理的。虽然它缺乏正确的语法。像往常一样。
  • @YourCommonSense 所以请帮忙修复 ;)
  • 我收到此错误:“警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与此行中的绑定变量数不匹配”:“mysqli_stmt_bind_param($result,” i", $cat_ID);"
【解决方案2】:

这里是一个如何使用mysqli的例子

面向对象

<?php   
    $connect= new mysqli("localhost","user","passwd","database");
    if ($connect->connect_errno){
      echo "could not connect";
    }

    $select = "SELECT * FROM tablename";

    if($result = $connect->query($select)){
        while($row = $result->fetch_object()){
            echo $row->rowname."<br>";
        }
    }
    else { echo 'no result'; }
    $connect->close();  
?>

程序风格

<?php   
    $connect= mysqli_connect("localhost","user","passwd","database");
    if (mysqli_connect_errno()){
      echo "could not connect";
    }

    $select = "SELECT * FROM tablename";

    if($result = mysqli_query($connect,$select)){
        while($row = mysqli_fetch_object($result)){
            echo $row->rowname."<br>";
        }
    }
    else { echo 'no result'; }
    mysqli_close($connect);  
?>

【讨论】:

  • 那是面向对象的风格。 OP 使用 Procedural 风格。
  • 我以前从未编写过面向对象的程序。当我在我的代码中实现您的示例时,它给了我错误:“注意:未定义的变量:con in”和“致命错误:在非对象 in 上调用成员函数 query()”。
  • 你必须先设置连接变量。像这样。 $con= new mysqli("localhost","user","passwd","database");
  • @Thoaren 在你的情况下是 $connect= new mysqli("localhost","user","passwd","database");我编辑代码
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2015-03-25
  • 2015-10-25
相关资源
最近更新 更多