我希望提高网站上数据库访问的安全性,而普遍的共识似乎是使用准备好的语句。我知道它们是如何工作的,但我想概括它们的用法,因此我需要提供的唯一内容是查询,参数类型和值。但是,我还没有找到任何特别好的资源,因此,我有点迷失方向。
基本上,我想要的是如下。
$query = "SELECT * FROM Table WHERE Column1 = ? AND Column2 = ?";
$array[0] = "string";
$array[1] = 5;
$parameters = "si";
$dbHandler = new mysqli("server", "user", "password", "database");
$stmt = $dbHandler->prepare($query);
$stmt->bind_param($parameters, $array);
$stmt->execute();
//Process results
我知道这不是正确的程序,但问题就在于此。我能做些什么来完成这项工作?我们的想法是$array
中的变量数量可能会发生变化,参数列表也会发生变化。
答案 0 :(得分:0)
我需要提供的是查询,参数类型和值。
你走了:
function mysqli_query_params($mysqli, $query, $params, $types = NULL)
{
$statement = $mysqli->prepare($query);
$types = $types ?: str_repeat('s', count($params));
$statement->bind_param($types, ...$params);
$statement->execute();
return $statement;
}
可以完全按照您描述的方式使用:
$query = "SELECT * FROM Table WHERE Column1 = ? AND Column2 = ?";
$params = ["string", 5];
$types = "si";
$mysqli = new mysqli("server", "user", "password", "database");
$data = mysqli_query_params($mysqli, $query, $params, $types)->get_result()->fetch_all();
请注意,大多数情况下,您可以避免显式设置类型,并默认情况下将它们作为字符串进行修改。
然而,PDO确实比原始mysqli更有用,你最好使用它。您可以从this tutorial
了解它P.S。您需要安装PHP> = 5.6和mysqlnd才能运行此代码。否则代码量将增加十倍。这是使用PDO的另一个原因。