2016-09-30 3 views
0

Извините, если у меня есть неправильная терминология.mysql query array counter

У меня есть цикл в PHP, который работает запрос MySQL ...

for ($i = 0; $i <count($user_id_pc); $i++) 
{ 
$query2 = " SELECT job_title, job_info FROM job_description WHERE postcode_ss = '$user_id_pc[$i]'"; 

$job_data = mysqli_query($dbc, $query2); 

$job_results = array(); 

    while ($row = mysqli_fetch_array($job_data)) 
     { 
      array_push($job_results, $row); 
     } 

} 

Результаты, которые даются, когда я вставить ...

print_r ($job_results);

На экран -> Массив()

Если я изменю запрос на m $user_id_pc[$i] до $user_id_pc[14] например, я получаю один набор результатов.

Если я включить этот код после запроса и внутри для цикла

echo $i; 
echo $user_id_pc[$i] . "<br>"; 

я получить номер счетчика $i находится на которой следуют данные внутри массива для этого счетчика позиции.

Я не уверен, почему массив $job_results пуст из запроса, используя счетчик $i, но нет, если я вводим номер вручную?

Это особый характер, который мне нужно бежать?

Полный код

 <?php 
print_r ($user_id_pc); 

    //Select all columns to see if user has a profile 
    $query = "SELECT * FROM user_profile WHERE user_id = '" . $_SESSION['user_id'] . "'"; 

     //If the user has an empty profile direct them to the home page 

    $data = mysqli_query($dbc, $query); 

    if (mysqli_num_rows($data) == 0) 
    { 
     echo '<br><div class="alert alert-warning" role="alert"><h3>Your appear not to be logged on please visit the<a href="index.php"> home page</a> to log on or register. <em>Thank you.</em></h3></div>'; 
    } 
//Select data from user and asign them to variables 
    else 
    { 
      $data = mysqli_query($dbc, $query); 
     if (mysqli_num_rows($data) == 1) 
     { 
      $row = mysqli_fetch_array($data); 
      $cw_job_name = $row['job_description']; 
      $cw_rate = $row['hourly_rate']; 
      $job_mileage = $row['mileage']; 
      $job_postcode = $row['postcode']; 
      $response_id = $row['user_profile_id']; 
     } 
    } 


    for ($i = 0; $i <count($user_id_pc); $i++) 
     { 
      $query2 = " SELECT job_title, job_info FROM job_description WHERE postcode_ss = '{$user_id_pc[$i]}'";           
    $job_data = mysqli_query($dbc, $query2); 
    $job_results = array(); 
     while ($row = mysqli_fetch_array($job_data)) 
      { 
       array_push($job_results, $row); 
      } 

    echo $i; 
?> 
<br> 
<?php 

} 
print ($query2); 
print $user_id_pc[$i]; 
     ?> 
+0

попробовать это $ Query2 = "SELECT JOB_TITLE, job_info FROM job_description WHERE postcode_ss =«" $ user_id_pc [$ я]".. «"; – JYoThI

+0

запрос внутри цикла не является хорошим способом добиться того, что есть, есть другой способ сделать это .....? –

ответ

0

Это в первую очередь ошибка синтаксиса, правильный синтаксис должен быть:

$query2 = " SELECT job_title, job_info FROM job_description WHERE postcode_ss = '{$user_id_pc[$i]}'"; 

Обратите внимание, что это правильный синтаксис, но все же не так !! По двум причинам первое заключается в том, что почти всегда лучше (быстрее, эффективнее, меньше ресурсов) выполнять соединение или подзапрос или простой запрос типа IN (массив), а не цикл и запрос несколько раз.

Вторая проблема заключается в том, что прохождение параметров таким образом оставляет уязвимость для SQL-инъекции. Вы должны использовать подготовленные заявления.

Правильный путь

if(count($user_id_pc)) { 
    $stmt = mysqli_stmt_prepare(" SELECT job_title, job_info FROM job_description WHERE postcode_ss = ?"); 
    mysqli_stmt_bind_param($stmt, "s", "'" . implode("','",$user_id_pc) . "'"); 
    mysqli_stmt_execute($stmt); 
} 

Обратите внимание, что цикл был заменен простым, если

+0

Привет, я попробовал фигурные скобки и все равно получаю одинаковые результаты. На данный момент я преподаю код и не знаю, что такое подготовленные заявления. Спасибо в любом случае – Eddie

+0

фигурные скобки работает. Пожалуйста, распечатайте $ query2 и посмотрите, что вы получаете (и опубликуйте в качестве комментария, если это не то, что вы ожидали от него). – e4c5

+0

Также обратите внимание, что, как я уже упоминал, использование этого подхода очень сильно ошибочно. – e4c5

0

Вы должны проверить переменную запроса, вместо:

$query2 = " SELECT job_title, job_info FROM job_description WHERE postcode_ss = '$user_id_pc[$i]'" 

Вы писали:

$query2 = " SELECT job_title, job_info FROM job_description WHERE postcode_ss = '" . $user_id_pc[$i] . "' "; 

И еще одна вещь, попробовать что-то другое, как это:

while ($row = mysqli_fetch_array($job_data)) 
    { 
     $job_results[] = array("job_title" => $row["job_title"], "job_info" => $row["job_info"); 
    } 

Затем попытайтесь напечатать значения.

+0

Привет, я пробовал 2 других кода, и у меня все те же результаты. Спасибо – Eddie

0

Извините, но мне нравится foreach(), поэтому ваш рабочий код:

<?php 

// To store the result 
$job_results = []; 

foreach($user_id_pc as $id){ 
    // selecting matching rows 
    $query2 ="SELECT job_title, job_info FROM job_description WHERE postcode_ss = '".$id."'"; 
    $job_data = mysqli_query($dbc, $query2); 
    // checking if query fetch any result 
    if(mysqli_num_rows($job_data)){ 
     // fetching the result 
     while ($row = mysqli_fetch_array($job_data)){ 
     // storing resulting row 
     $job_results[] = $row; 
    } 
    } 
} 
// to print the result 
var_dump($job_results); 
+0

Привет, да, foreach работал спасибо – Eddie