0

私はmysqlとPHPをいじっていて、非常に奇妙な問題に遭遇しました:

データベース接続が正常に確立されたら、クエリに 2 つの変数を設定します。

$searchcolor = $_SESSION["color"];
$searchprice = $_POST["price"];

$query = "SELECT `toys`.`id` FROM `database`.`toys` WHERE `toys`.`color` = $searchcolor AND `toys`.`price` = $searchprice;";
$result = mysqli_query($link, $query);

echo $query;

このクエリは機能しません。エコーすると、次のような正しい文字列が読み取られます。

SELECT `toys`.`id` FROM `database`.`toys` WHERE `toys`.`color` = brown AND `toys`.`price` = 1500;

ただし、このコードは問題なく動作します。

$searchcolor = $_SESSION["color"];
$searchprice = $_POST["price"];

$query = "SELECT `toys`.`id` FROM `database`.`toys` WHERE `toys`.`color` = $searchcolor AND `toys`.`price` = 1500;";
$result = mysqli_query($link, $query);

echo $query;

最初に、配列$searchpriceによってコンテンツが正しく取得されていませんでしたが。$_POSTしかし、echo最初の例の ed 検索クエリは問題ないようです。

-値$searchprice = 1500;を取得する代わりに設定するときにも機能します。$_POST

整数などにキャストしようとしましたが、うまくいきませんでした。

これに関するすべてのヒントに乾杯し、感謝します!

(コードは短縮されています!)

おもちゃのテーブル構造:

id int(10)
name varchar(10)
color varchar(10)
price int(20)

編集:

おお、興味深い発見がありました:

echo "-".$searchprice."-";

-5-を与える

if ($searchprice == 5){echo "1";}
if ($searchprice == "5"){echo "2";}

与える.. 何もない?!

var_dump($searchprice);

string(14) "5" を与える

編集:

echo bin2hex($searchprice);

3c6e6f62723e353c2f6e6f62723e (?!) を返します

解決策: 送信フォームで Unicode 文字を使用しました。それがすべてを壊した。教訓: ユニコードを避ける。

4

1 に答える 1

2

まず、これを読む必要があります: PHP で SQL インジェクションを防ぐにはどうすればよいですか?

これを試して:

$q = mysqli_prepare($link, 'SELECT toys.id FROM toys WHERE toys.color = ? AND toys.price = ?');

mysqli_stmt_bind_param($q, 'si', $searchcolor, $searchprice); //d for double

$searchcolor = $_SESSION['color'];
$searchprice = $_POST['price'];

mysqli_stmt_execute($q);

その前に、DB に正しく接続する必要があります。で使用さdatabaseれているようですFROM

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
于 2013-11-08T23:37:32.187 に答える