我正在尝试使用PDO创建一个安全的,SQL注入证明的数据库连接。我知道某些字符集容易受到攻击,但UTF-8不是其中之一。我也知道我应该关闭PDO准备好的语句仿真模式。下面是我为连接放在一起的代码。我的问题是双重的。
有人可以看看下面的代码,以确保我做的一切正确吗?我测试了它,它的工作原理。但是我还能添加其他东西以使其更安全或者我做得对吗?
我不是百分之百肯定我的数组内部的语法是正确的,虽然我插入时没有任何错误,所以我倾向于相信它。但是,有没有办法测试或确认这些属性实际上是否已设置?或者有人可以通过查看语法是否正确并且这些属性肯定被设置来判断?
提前感谢您的帮助。我的完整数据库连接代码和使用预准备语句的插入如下所示。
function addItem($category, $item, $price) {
$dsn = 'mysql:host=localhost;dbname=myDatabase;charset=utf8';
$username = "myUsername";
$password = "myPassword";
$options = array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$link = new PDO($dsn, $username, $password, $options);
$query = $link->prepare("INSERT INTO items (category, item, price)
VALUES (:category, :item, :price)");
$query->bindParam(':category', $category);
$query->bindParam(':item', $item);
$query->bindParam(':price', $price);
$query->execute();
echo "New item added successfully";
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$link = null;
}