我正在从android的数据库中检索数据,因此创建了一个php文件,如下所示。
<?php
$db_host = "localhost";
$db_uid = "root";
$db_pass = "";
$db_name = "abc";
$db_con = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect');
mysql_select_db($db_name);
$sql = "SELECT * FROM people WHERE birthyear > '". $_POST["birthyear"]."'";
$result = mysql_query($sql);
while($row=mysql_fetch_assoc($result))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>现在,当我在浏览器中以localhost/script.php的身份运行它时,抛出了错误,输出显示如下
注意:未定义索引: C:\xampp\htdocs\jasonscript.php中第14行的出生年{"id":"1","name":"m","sex":"1"," birthyear ":"1989"},{"id":"2","name":"a","sex":"1","birthyear":"1986"},{"id":"3","name":"b","sex":"0","birthyear":"1986"}
请告诉我如何更正我的代码。
发布于 2013-05-08 18:42:31
$output[]=array("key"=>$row['field_name'],"key1"=>$row['field_name2']);像这样的存储数组
发布于 2013-05-08 18:45:09
您直接在查询中插入$_POST["birthyear"],这使您很容易受到SQL注入的攻击。现在就停止这样做吧!
这也是你得到错误的原因。当您在浏览器中直接调用脚本时,将使用GET请求,并且不会有任何POST变量可用。因此,您的$_POST数组不会有birthyear的键,因此它会警告您这一点。
你应该从下面这样的东西开始
<?php
$by = isset($_POST["birthyear"]) ? $_POST["birthyear"] : "";
if (empty($by)) {
echo 'Invalid birthyear';
exit;
}
//SANITIZE YOUR BIRTHYEAR HERE
//in this case, probaly check for a integer between 1900 and 2100 or something.
//Although just an int could be enough to prevent injection
if (!is_int($by)) {
echo 'You failed to provide a valid year';
exit;
}
$sql = "SELECT * FROM people WHERE birthyear > '". $by."'";
//execute the code
?>尽管上面的代码是安全的,但您应该像在mysqli prepared statements或PDO中使用的那样检查bound parameters
发布于 2013-05-08 18:45:56
你可能没能通过帖子正确地发送这些值。尝试使用print_r($_POST);查看您实际发送的内容
你仍然可以得到所有的结果,因为每年都是> ''
https://stackoverflow.com/questions/16438535
复制相似问题