Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 执行查询时由于撇号而引发错误_Php_Sql - Fatal编程技术网

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'));。还可以将位置参数(
)与索引值数组一起使用。