我一直在试图弄清楚如何保护一些代码。它所做的只是获取该行的id,然后从该行的各个数据库填充页面。我所看到的所有例子都是关于bind_param的,但我不知道我的情况涉及到什么。保护mysqli查询
旧代码是脆弱:
<?php
$con=mysqli_connect("HOST","USER","PASS","DBNAME");
$con->set_charset("utf8");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(isset($_GET['id'])) {
$txt= $_GET['id'];
$result = mysqli_query($con,"SELECT * FROM news where article_id=" . $txt);
while($row = mysqli_fetch_array($result))
{
?>
// Show something . . .
<?php }
}
mysqli_close($con);
?>
利用这种单独的页上:
<a target="_blank" class="text-center article_hover" href="article.php?id=<?= $row['article_id'] ?>">
第一(可悲)尝试(错误):
<?php
$dbConnection = new PDO('mysql:dbname=DBNAME;host=HOST;charset=utf8', 'USER', 'PASS');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbConnection->prepare('SELECT * FROM news WHERE article_id = ?');
$stmt->bind_param('article_id', $_GET['article_id']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {?>
// Show something . . .
<?php }?>
抛出的错误是:
Fatal error: Call to undefined method PDOStatement::bind_param()
更新: 使用后:bindParam而不是bind_param。新的错误抛出:
Fatal error: Call to undefined method PDOStatement::get_result()
我很抱歉如果我的代码是可怕的,谢谢你的任何建议。
[我可以在PHP中混合MySQL API?](http://stackoverflow.com/questions/17498216/c an-i-mix-mysql-apis-in-php) - 答案是:不。 –
PDO使用'bindParam()',而不是'bind_param()' –
你现在也使用错误的GET数组和Jay编辑,就像你做的 –