Php 执行查询时由于撇号而引发错误
我一直在开发一个网站,从一开始我就在思考如何解决这个问题 这就是: 我的网站有很多输入字段,因此,我注意到如果用户使用Php 执行查询时由于撇号而引发错误,php,sql,Php,Sql,我一直在开发一个网站,从一开始我就在思考如何解决这个问题 这就是: 我的网站有很多输入字段,因此,我注意到如果用户使用,会出现SQL错误。 我一直在寻找类似的问题,但我没有发现任何问题,但我相信我可能在寻找错误的方法 这是我执行查询的方式: function query($sql) { $stmt = $conn->prepare($sql); $stmt->execute(); } 我为我的查询创建了一个函数: function query($sql) {
,
会出现SQL错误。
我一直在寻找类似的问题,但我没有发现任何问题,但我相信我可能在寻找错误的方法
这是我执行查询的方式:
function query($sql) {
$stmt = $conn->prepare($sql);
$stmt->execute();
}
我为我的查询创建了一个函数:
function query($sql) {
$stmt = $conn->prepare($sql);
$stmt->execute();
}
然后我就这样使用它:
$sql = "INSERT INTO users(fname,lname,username) VALUES('$fname','$lname','$username')";
$stmt = $dbconn->query($sql); // $dbconn is the variable of my db connection class
我曾考虑使用stru-replace将\
替换为\
,但如果用户使用\
,则它将转换为'
,这不是一个很好的解决方案。使用存储过程并将数据作为参数传递
此外,仅向您的网站登录时的用户授予DB中的“执行”权限
这将防止黑客运行存储过程之外的任何数据库查询/更新,还将防止SQL注入攻击并提高性能
尝试$sql=“插入用户(fname、lname、username)值(“..fname.”、“$lname.”、“$username.”)代码>参数化您的查询,不仅可以解决此问题,还可以避免遭受sql注入攻击。如果我告诉你我的用户名是”,那真是太遗憾了;删除表用户--
要详细说明@jnevil的注释,您可以将一组参数作为参数传递给execute()
,以便为这样的查询准备语句插入用户(fname,lname,username)值(:fname,:lname,:username)
您可以执行$stmt->execute(['fname'=>'foo',lname'=>'bar',username'=>'foo.bar'));代码>。还可以将位置参数(?
)与索引值数组一起使用。