对于前。地址页面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'
如果make从phpmyadmin中选择我有10行。
但如果我使用 test.php?prid = 4477535 ,我会看到空白页。
print_r($ select_image_array)未显示数组。
请告诉我为什么我会看到带有phpmyadmin的行,而不是看到带有脚本的行?
答案 0 :(得分:3)
就像其他人说的那样,你很容易进行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'];
}
答案 1 :(得分:0)
你做错了。 您必须将资源(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);
BTW,你这里有一个安全漏洞 - SQL注入。
答案 2 :(得分:0)
测试以下
$result = query("SELECT * FROM products_images WHERE `product_idn`='$product_idn'")
$select_image = mysql_fetch_assoc($result);
var_dump($select_image);
有关详细信息,请查看http://se2.php.net/mysql_query
答案 3 :(得分:0)
你就是 echo $ row-> image; 永远不要初始化$ select_image_array
答案 4 :(得分:0)
print_r ($select_image_array);
不会显示任何内容,因为没有定义$select_image_array
。您的意思是print_r ($select_image);
吗?
query()是你定义的函数吗?如果没有,你没有错误,你很可能什么也看不见。
您还需要清理SQL。现在最简单的方法,因为它是一个整数:
$product_idn=(int)$_GET['prid'];