我一直在試圖弄清楚如何保護一些代碼。它所做的只是獲取該行的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編輯,就像你做的 –