Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 SQL随机查询不受注入影响?_Php_Mysql_Sql_Mysqli - Fatal编程技术网

使PHP SQL随机查询不受注入影响?

使PHP SQL随机查询不受注入影响?,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我已经读到,为了防止SQL注入,所有MySQL语句实际上都应该使用mysqli和parametered。上面的代码连接到一个数据库,选择一个随机的“verbs”行,然后使用mysql\u fetch\u assoc将与“verb”行和def列相交的单元格作为该动词的定义 什么样的更改可以使随机查询不受注入的影响 $user_name = "name"; $password = "password"; $database = "words";

我已经读到,为了防止SQL注入,所有MySQL语句实际上都应该使用mysqli和parametered。上面的代码连接到一个数据库,选择一个随机的“verbs”行,然后使用mysql\u fetch\u assoc将与“verb”行和def列相交的单元格作为该动词的定义

什么样的更改可以使随机查询不受注入的影响

        $user_name = "name";
        $password = "password";
        $database = "words";
        $server = "host";

    $db_handle = mysqli_connect($server, $user_name, $password) or die (mysqli_error($db_handle));
    $db_found = mysqli_select_db($db_handle, $database) or die (mysqli_error($db_handle));

        $randVerb = mysql_query("SELECT * FROM verbs ORDER BY RAND() LIMIT 1"); 
        $db_field = mysql_fetch_assoc($randVerb); 
        $definition= $db_field['def']; 

SQL注入只能在使用客户端提供的某些变量的查询中使用。这里没有任何查询,因此查询是安全的

SQL中没有对注入有本质危险的内容。当您运行基于某个用户输入变量的查询时,可以对查询进行清理或使其安全

例如,有人正在登录。您将有一个如下的查询

SELECT COUNT() FROM `users` WHERE `user`='$user' AND `pass`='$pass'
这意味着如果$pass='或1=1-


他们将作为数据库中的第一个用户登录。所以,在查询中使用变量之前,您需要先清理变量,基本上,清理SQL数据时是在转义引号。这就是为什么PHP说要使用mysqli而不是mysql。

您必须使用mysqli或PDO,因为mysqli已被弃用,它将在未来的PHP版本中被删除

您的代码是安全的,因为您不使用任何参数

错误代码的一个示例:


如果要在查询中使用参数,请使用准备好的语句!这是一个非常好的教程:

此查询中没有参数,因此是安全的。您所听到的参数化是指查询中的占位符,通常在WHERE子句中。说mysqli是传统mysql库的现代替代品是正确的,但PDO/PDO_mysql也很优秀。旁注:您混合了mysql API。这似乎与您之前的问题完全相同。在问题被搁置后复制并粘贴它不是一种理想的做法,但请在评论中添加指示dup未解释的内容。我的意思是更多地关注注入方面,而不是从mysql转换到mysqli。指示的副本没有太多地讨论注入。好吧,所以副本应该是这样的:是的,但是如果不使用准备好的语句,您也可以在其中编写易受攻击的代码!旁注:Mysqli和PDO是相似的。Mysqli的工作速度快了一点,但只支持MySQL数据库,PDO慢了一点,但支持不同的数据库,如postgre、sqlite、mssql等。我是如何使用它的呢?是否有一种相对简单的方法可以将其更改为适用于mysqli的正确格式?请查看本教程:并搜索和阅读一些有关准备好的语句的信息:
mysql_query("SELECT * FROM verbs WHERE id = ".$_GET['id']);