Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 为什么[1]上的问题的答案是?_Php_Mysql - Fatal编程技术网

Php 为什么[1]上的问题的答案是?

Php 为什么[1]上的问题的答案是?,php,mysql,Php,Mysql,好的,首先,这是我发送查询的函数: function send_query($sql) { global $rows; global $conn; connect(); $result = $conn->query($sql); while ($row = $result->fetch_assoc()) { $rows[] = $row; } mysqli_free_result($result); $conn->close(); return $rows; } 当

好的,首先,这是我发送查询的函数:

function send_query($sql) {
global $rows;
global $conn;
connect();

$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {
  $rows[] = $row;
}
mysqli_free_result($result);
$conn->close();

return $rows;
}
当我这样使用它时:

$rows = send_query("SELECT views FROM posts WHERE postid = " . $_GET['id']);


foreach( $rows as $row ) {
        print_r($row);
        echo "<BR>";
    }

为什么它将我需要的答案放在数组的[1]而不是[0]中?为什么要把我没有要求的其他东西放进[0]?

看起来是因为你从来没有在你的查询中插入过$\u GET值。如果您无法解决此问题,请选择foreach曲目,而不是“for($i;…)”样式。祝你好运谢谢你的回复。为什么永远不要在查询中插入$\u GET值?这仅仅是出于安全考虑吗?它为SQL注入打开了大门。用户输入应该总是经过消毒,这就是为什么。。。这不是一件小事:SQL注入不需要太多的知识或技能=>很多有恶意的人都可以使用它=>保护自己不受它的影响。$rows数组是空的。它在每个页面的顶部声明为空。我不认为它是空的,否则您将不会有[0]结果,其中包含您没有查询的字段:Array([postid]=>1[username]=>jesusfreak[unique]=>3)。全局变量将在声明后传递到send_查询函数中,并在结果集前面加上前缀。你必须小心使用Globals。幽默我并尝试我的代码建议既然函数仍然返回它,那么不将
$rows
定义为全局行怎么样?摆脱全球变暖@AbraCadaver正确,它根本不需要定义。我在考虑这是否是伪代码,它可以在其他地方使用并保留它,但将结果附加到一个新数组:)太好了!问题是我忘了在重新澄清之前取消设置它。干得好!:) global $rows global $rows
function send_query($sql) {
global $rows;
global $conn;
connect();

$result = $conn->query($sql);
$sqlresults = array();
while ($row = $result->fetch_assoc()) {
   $sqlresults[] = $row;
}
mysqli_free_result($result);
$conn->close();

return $sqlresults;
}