我的页面上有一个查询,它使用GET变量从我的表中提取数据......
如果我回显我的GET var数据就在那里我的查询错误,而不是或死我可以在浏览器中显示错误?
// Get USER ID of person
$userID = $_GET['userID'];
// Get persons
$sql = 'SELECT * FROM persons WHERE id = $userID';
$q = $conn->query($sql) or die('failed!');
答案 0 :(得分:6)
$sql = "SELECT * FROM persons WHERE id = $userID";
您必须使用双引号在查询字符串中使用变量。
你也可以这样做:
$sql = "SELECT * FROM persons WHERE id = ".$userID;
你应该做的是(为了保护自己免受sql injection):
$safeuid = $conn->prepare($userID);
$sql = "SELECT * FROM persons WHERE id = ".$safeuid;
您可以随时在php页面的顶部使用它进行调试:
ini_set('display_errors',1);
error_reporting(E_ALL);
答案 1 :(得分:2)
你试过$q = $conn->query($sql) or die($conn->error());
吗?
答案 2 :(得分:1)
是的,你可以,但你应该只进行调试。通过有目的地输入错误的输入并阅读错误,破解者可以获得很多洞察力。
我假设你正在使用MySQLi;命令是$conn->error()
。所以你的行将是:
$q = $conn->query($sql) or die($conn->error());
另外,你做错了是你使用单引号来定义$sql
。您需要使用双引号将$userID
写入字符串。所以你想要的是:
$sql = "SELECT * FROM persons WHERE id = $userID";
或
$sql = 'SELECT * FROM persons WHERE id = ' . $userID;
答案 3 :(得分:1)
您需要使用双引号来评估字符串中的变量。也就是说,
$sql = 'SELECT * FROM persons WHERE id = $userID';
应该是
$sql = "SELECT * FROM persons WHERE id = $userID";
您应该确保查询始终有效,而不是删除die
。换句话说:验证 userID
参数。 $_GET
可以包含用户想要提供的任何内容 - 它可以是一个数组,也可以是一个字符串,它可以是一个带有可以drop your tables的恶意有效负载的字符串。所以检查它是一个整数。如果没有,请向用户返回相关消息。
答案 4 :(得分:1)
不是php专家,但您可以尝试:
// Get USER ID of person
$userID = $_GET['userID'];
// Get persons
$sql = 'SELECT * FROM persons WHERE id = $userID';
$q = $conn->query($sql) or die('failed!' . mysql_error());
错误应附加到您的骰子消息的末尾。