0

我正在玩弄 mysql 和 PHP 并遇到一个非常奇怪的问题:

建立成功的数据库连接后,我为查询设置了两个变量:

$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-value 时也有效。

我尝试将它转换为整数和其他东西,但这没有奏效。

干杯并感谢您对此的每一个提示!

(代码被缩短了!)

玩具表结构:

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);

给出字符串(14)“5”

编辑:

echo bin2hex($searchprice);

给出 3c6e6f62723e353c2f6e6f62723e (?!)

解决方案:我在提交表单中使用了 unicode 字符。那打破了一切。教训:避免使用 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 正确连接。我看到你用databaseFROM.

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