现在我有一个网站,我需要从基本的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