現在我有一個網站,我需要從基本的SQL注入攻擊安全。該網站是非常基本的,只是一個登錄表單和產品搜索頁面。現在我有一個文件,我在網站上保留了我所有的功能。下面是幾個例子他們看起來像:創建參數來停止sql注入
function createUser($userName,$userPass){
$query = <<<STR
INSERT INTO Users (userName,userPass,userTypeID)
VALUES ('$userName','$userPass',2)
STR;
return executeQuery($query);
}
或者
function getProductByName($productName){
$query = <<<STR
SELECT productID,productName, productPic,productDesc
FROM Products
WHERE productName LIKE '%$productName%'
STR;
return executeQuery($query);
}
我要改變這些,讓他們充分利用準備好的發言的,但我無法理解如何,我可以將它們轉換。我發現的例子是利用bindParam的像這樣的:
$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd)
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();
我可以將bindparam到我的功能不知何故?任何線索都會很棒。
感謝您的信息。這可能是一個愚蠢的問題,但有一件事我很困惑的是這裏這一行: '$ stmt = $ dbh-> prepare(「INSERT INTO users(name)VALUES(:name)」);' 什麼是$ dbh在做什麼?這是否應該在其他地方宣佈?這是數據庫連接嗎?我看到有些人在線聲明爲 ''??php $ dbh = new PDO('mysql:host = localhost; dbname = test',$ user,$ pass); ?>' 是這樣嗎? – SheepCity
@SheepCity它是「db處理程序」,因此它保存關於連接的信息,正確。你發佈的代碼看起來是正確的,欲瞭解更多信息,請閱讀[官方手冊](http://php.net/pdo)。爲什麼這是必要的?你可能有多個數據庫,所以你可以區分它們。以前PHP假設,現在你需要明確地告訴它 – kero