2015-05-19 4 views
0

Хорошо прежде всего, вот моя функция для отправки запроса:Почему ответ на запрос на [1]?

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>"; 
    } 

Я получаю этот результат ...

Array ([postid] => 1 [username] => jesusfreak [unique] => 3) 
Array ([views] => 0) 

Почему он помещает ответ, который мне нужен в [1] из массива вместо [0]? И почему это ставит те другие вещи, которые я не запрашивал в [0]?

+0

Не НАВСЕГДА НАВСЕГДА НАВСЕГДА вставить значение в $ _GET внутри вашего запроса. Если вы не можете решить эту проблему, перейдите на дорожку foreach вместо стиля «for ($ i; ...) ....». Удачи ! –

+0

Спасибо за ваш ответ. Почему вы никогда не должны вставлять значение $ _GET внутри запроса? Это касается только проблем безопасности? – thinkofacard

+0

Это открывает вам до SQL-инъекции. Пользовательский ввод всегда должен быть дезинфицирован –

ответ

2

Похоже, что ваш

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; 
} 
+0

$ rows array пуст. Он объявляет его пустым в верхней части каждой страницы. – thinkofacard

+0

Я не думаю, что он пуст, иначе вы не получили бы результат [0] с полями, для которых вы не запрашиваете: Array ([postid] => 1 [username] => jesusfreak [unique] => 3) , Глобалы будут переданы в вашу функцию send_query, так как вы ее объявили, добавив их к набору результатов. Вы должны быть осторожны с Globals. Юмор мне и попробуйте мое предложение кода –

+0

Как насчет того, чтобы просто не определять '$ rows' как глобальные, так как функция возвращает его в любом случае? Избавьтесь от глобального! – AbraCadaver

Смежные вопросы