0

例:アドレスページ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を使用すると、空のページが表示されます。

print_r($ select_image_array)は配列を表示しません。

phpmyadminで行が表示され、スクリプトで行が表示されない理由を教えてください。

4

5 に答える 5

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'];
}
于 2012-11-25T01:32:53.733 に答える
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);

ところで、ここにはセキュリティホールがあります-SQLインジェクション。

于 2012-11-25T01:27:27.173 に答える
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を参照してください。

于 2012-11-25T01:28:55.237 に答える
0

$row->imageをエコーするだけです。$select_image_arrayを初期化しないでください

于 2012-11-25T01:31:12.313 に答える
0

print_r ($select_image_array);$select_image_array定義されていないため、何も表示されません。意味print_r ($select_image);ですか?

query()はあなたが定義した関数ですか?そうでない場合で、エラーが発生していない場合は、何も表示されない可能性があります。

また、SQLをサニタイズする必要があります。整数なので、今のところ最も簡単な方法:

$product_idn=(int)$_GET['prid'];
于 2012-11-25T01:34:07.277 に答える