Php 如何使用foreach从数据库mysql中选择行?

Php 如何使用foreach从数据库mysql中选择行?,php,mysql,Php,Mysql,对于ex.address page test.php?prid=4477535 代码页test.php function query($query) { $database = 'test'; $host = 'test'; $username = 'test'; $password = 'test'; $link = mysql_connect($host,$username,$password); if (!$link) { die(m

对于ex.address page test.php?prid=4477535

代码页test.php

function query($query) {
    $database = 'test';
    $host = 'test';
    $username = 'test';
    $password = 'test';
    $link = mysql_connect($host,$username,$password);
    if (!$link) {
    die(mysql_error());
    }
    $db_selected = mysql_select_db($database);
    if (!$db_selected) {
    die(mysql_error());
    }
    $result = mysql_query($query);
    mysql_close($link);
    return $result;
    }


        $product_idn=$_GET['prid'];

        $select_image = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'") or die(mysql_error());
        foreach ($select_image as $row)
        {
        $select_image_array[]=$row->image;
        }

print_r ($select_image_array);
收到请求

SELECT * 
FROM products_images
WHERE  `product_idn` =  '4477535'
如果从phpmyadmin中选择,我有10行

但如果我使用test.php?prid=4477535,我会看到一个空页面

打印($select\u image\u数组)不显示数组。

请告诉我为什么我用phpmyadmin看到行而没有用脚本看到行?

你做错了。 您必须将资源(mysql_query返回一个资源)提取到数组中,数组的键将是查询返回的行的名称

$product_idn=$_GET['prid'];

$select_image = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'") or die(mysql_error());

    while($fetch=mysql_fetch_assoc($select_image))
    {
         echo $fetch['image'];
    }

    print_r ($select_image_array);
顺便说一句,这里有一个安全漏洞-SQL注入。

你做错了。 您必须将资源(mysql_query返回一个资源)提取到数组中,数组的键将是查询返回的行的名称

$product_idn=$_GET['prid'];

$select_image = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'") or die(mysql_error());

    while($fetch=mysql_fetch_assoc($select_image))
    {
         echo $fetch['image'];
    }

    print_r ($select_image_array);
顺便说一句,这里有一个安全漏洞-SQL注入。

测试以下内容

$result = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'")
$select_image = mysql_fetch_assoc($result);
var_dump($select_image);
有关更多信息,请查看以下测试

$result = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'")
$select_image = mysql_fetch_assoc($result);
var_dump($select_image);
有关更多信息,请查看 echo$行->图像; 永远不要初始化$select\u image\u数组 echo$行->图像;
永远不要初始化$select\u image\u数组

就像另一个所说的那样,由于不序列化输入,您很容易发生SQL注入,但要修复代码,请使用以下方法:

$select_image = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'") or die(mysql_error());

while($data = mysql_fetch_assoc($select_image))
{
    echo $data['image'];
}

正如另一位所说,由于不序列化输入,您很容易进行SQL注入,但要修复代码,请使用以下方法:

$select_image = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'") or die(mysql_error());

while($data = mysql_fetch_assoc($select_image))
{
    echo $data['image'];
}
print\r($select\u image\u array)不会显示任何内容,因为未定义
$select\u image\u数组
。你的意思是
print\r($select\u image)

query()是您定义的函数吗?如果没有,而且你身上没有错误,你很可能什么也看不到

您还需要清理SQL。目前最简单的方法,因为它是一个整数:

$product_idn=(int)$_GET['prid'];
print\r($select\u image\u array)不会显示任何内容,因为未定义
$select\u image\u数组
。你的意思是
print\r($select\u image)

query()是您定义的函数吗?如果没有,而且你身上没有错误,你很可能什么也看不到

您还需要清理SQL。目前最简单的方法,因为它是一个整数:

$product_idn=(int)$_GET['prid'];

为什么每次查询都要打开一个新连接?为什么每次查询都要打开一个新连接?