PHP查询失败,显示错误?

时间:2012-07-11 20:25:10

标签: php mysql

我的页面上有一个查询,它使用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!');

5 个答案:

答案 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());

错误应附加到您的骰子消息的末尾。