Php 这是否足以防止使用Mysql\u查询注入Mysql

Php 这是否足以防止使用Mysql\u查询注入Mysql,php,mysqli,code-injection,Php,Mysqli,Code Injection,我知道大多数答案都会说使用PDO/Mysqli,但我正在尝试看看是否可以这样做,然后继续学习PDO/Mysqli: 这个功能足以防止mysql注入吗 function anti_inject($sql) { $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql); $sql = preg_replac

我知道大多数答案都会说使用PDO/Mysqli,但我正在尝试看看是否可以这样做,然后继续学习PDO/Mysqli:

这个功能足以防止mysql注入吗

function anti_inject($sql)
{

    $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);
    $sql = preg_replace("/[^a-zA-Z0-9]+/", " ", $sql);
    $sql = mysql_real_escape_string($sql);
    $sql = trim($sql);
    $sql = strip_tags($sql);
    $sql = addslashes($sql);
    $sql = strtolower($sql);
    return $sql;
}
正在为这一行寻找更好的替换项$sql=preg\u replacesql\u regcase/from | select | insert | delete | where | drop table | show tables |*|-|\\/,$sql

因为我想检查的名字,从选择插入游戏标签等

我已经禁用了mysql用户的drop table。没有。这是没有希望的

$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);
这会毫无理由地丢弃数据

$sql = preg_replace("/[^a-zA-Z0-9]+/", " ", $sql);
$sql = mysql_real_escape_string($sql;
$sql = strip_tags($sql);
$sql = addslashes($sql);
这会毫无理由地丢弃数据

$sql = preg_replace("/[^a-zA-Z0-9]+/", " ", $sql);
$sql = mysql_real_escape_string($sql;
$sql = strip_tags($sql);
$sql = addslashes($sql);
如果没有丢失,那么这是转换一段数据以插入SQL查询的正确方法

$sql = trim($sql);
这会毫无理由地丢弃数据

$sql = preg_replace("/[^a-zA-Z0-9]+/", " ", $sql);
$sql = mysql_real_escape_string($sql;
$sql = strip_tags($sql);
$sql = addslashes($sql);
这会毫无理由地丢弃数据

$sql = preg_replace("/[^a-zA-Z0-9]+/", " ", $sql);
$sql = mysql_real_escape_string($sql;
$sql = strip_tags($sql);
$sql = addslashes($sql);
这以不适合SQL查询的方式转义数据。由于您已经使用了mysql\u real\u escape\u字符串,一些数据将被双重转义并因此被破坏

$sql = strtolower($sql);
这无缘无故地破坏了数据

当使用过时的、不推荐使用的mysql_u库时,mysql_real_escape_string是您应该使用的唯一转义函数。然后,在组合SQL字符串时,需要获取结果并适当地使用它们


但是不要使用mysql。使用。

严格地说,就SQL注入保护而言,此函数是完全无用的,同时也是不可用的。虽然它可能在您的某些特定情况下为您服务,但它不能用作通用解决方案。然而,即使在这种情况下,这也是非常多余的


那么,为什么不使用一个解决方案呢?这个解决方案已经被证明对所有涉及的案例都是防错的

为什么在学习使用现代图书馆之前,你要先学习使用那些不推荐使用的、过时的、通常很糟糕的图书馆呢?这看起来就像是为了换频道而按下电视遥控器上的每一个按钮。您可能已更改频道,但也可能已启动DVD播放机并将图像从彩色改为黑白。最好先检查遥控器上的按钮是否正确。即,阅读有关的文档!我需要strtolower,我用它来检查基于java的游戏中的名字,我只允许数字和字母,我发现如果用户检查名字issofly,降低所有字符会更容易;所以其中两个函数有一个原因,其余的都是我一直在读的。@Swaly除了阅读一个函数外,还应该理解它们所读的内容,请注意。@Swaly谈到小写,它与任何安全性无关,因此offopic,mysql已经有了一个独立于大小写的比较。看看你使用mysql的方式,不是mysqli_uuo或PDO,而是PDO准备的语句只有在使用PDO时,实际的查询会改变还是只改变代码?比如像这样,;这个[mysql_queryUPDATE items SET name='$newname'其中index=$index LIMIT 1;]会改为[$pdo->mysql_queryUPDATE items SET name='$newname'其中index=$index LIMIT 1;]还是与之不同?请在开始评论之前查看我提供的链接。先谢谢你。