我正在玩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
- 值时,它也有效。
我尝试将它转换为整数和东西,但这没效果。
欢呼并感谢每一个暗示!
(代码缩短了!)
玩具表结构:
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。
答案 0 :(得分:2)
首先,您应该阅读:How can I prevent SQL injection in PHP?
试试这个:
$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);
在此之前,您应该正确连接数据库。我看到您在database
中使用了FROM
。
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');