2015-10-12 4 views
-5

Я хочу, чтобы запрос выбора выполнялся в соответствии с этим массивом. Пример массива:Массив в критериях WHERE

Array([0] => '[email protected]' [1] => '[email protected]') 

Но ошибка возникает, когда я ее получаю. Ошибка есть:

Предупреждение: mysqli_fetch_array (ожидает параметр 1, чтобы быть mysqli_result), логическое значение дано в строке нет __

Мой код

$other_user_array = array(); 

$result = mysqli_query($con, "SELECT * FROM friends WHERE (frd_one ='$email') OR (frd_two = '$email')"); 

     while($row = mysqli_fetch_array($result)){ 
      $id_frd = $row['id']; 
      $user_one = $row['frd_one']; 
      $user_two = $row['frd_two']; 
        if($user_one == $email){ 
          $other_user_array[] = $user_two; 
         } else{ 
           $other_user_array[] = $user_one; 
          } 
     } 

     $join = implode(',',$other_user_array); 
      $select_post = mysqli_query($con,"SELECT * FROM posts WHERE created_by IN ($join)"); 
      while($postrow = mysqli_fetch_array($select_post)){ 
          $post_id = $postrow['id']; 
          $post_content = ucfirst($postrow['content']); 
          $post_created_by = $postrow['created_by']; 
         } 

Я также хочу запрос $ select_post быть упорядоченным по времени.

Любая помощь будет оценена по достоинству.

+1

Зачем нужна такая структура ?. В конечном итоге это так же, потому что если вы не хотите индекса, просто игнорируйте его. – sandeepsure

+2

Нет ... ассоциативный массив имеет строковые ключи, а перечисляемый массив имеет числовые ключи, но __all__ массивы имеют ключи .... вы не можете иметь массивы без каких-либо ключей вообще, потому что массив представляет собой серию ключей/пары значений –

+1

Ассоциативный массив использует указанные ключи. Оба примера - это числовые массивы. Ассоциативный массив будет иметь указанные ключи - в большинстве случаев строки или смешанные типы, т. Е. Массив (149 => «Некоторое значение», «некоторый ключ» => «Некоторое значение»). – Dencker

ответ

0

Пожалуйста, попробуйте ввести код ниже, он даст вам последовательный массив.

$temp = array('ball','bat'); 

Чтобы добавить

$temp[] = 'stump'; 
+0

Но сначала массив должен быть пустым. Затем, когда массив пуст, php рассматривает его как ассоциативный массив. – Harsh

+0

Если вы хотите добавить записи в пустой массив, вы можете использовать user_push. – BFWebAdmin

+0

yeah $ temp = array(); будет пустой массив, и он не будет рассматриваться как ассоциативный массив, но, пожалуйста, предпочитайте $ temp [] = 'value_to_be_added'; так как это намного быстрее, чем метод array_push(). –

1

Не совсем; PHP добавит ключ для вас, если вы его не укажете.

Вы можете определить массив как в первом примере, но PHP будет рассматривать его так, как если бы вы определили его, как в своем втором примере. Итак, когда вы извлекаете массив, у него будет ключ, но в любом случае нет причин не хотеть ключа.

+0

Так скажите мне, как использовать ключ или ассоциативный массив в 'IN CRITERIA IN MYSQL' – Harsh

+0

Ну, это не * в * MySQL по вашему вопросу. Это в PHP. Я думаю, вам нужно задать новый вопрос, выходящий из того, что вы пытаетесь достичь, и в чем проблема, вместо того, чтобы просить об этом с помощью полурешения, потому что я подозреваю, что вы лаете не то дерево и не получите ответ вам. Но, если вы хотите найти значение в массиве PHP, используйте это: http://php.net/manual/en/function.in-array.php – BFWebAdmin

+0

(вопрос был отредактирован по существу до такой степени, что мой ответ больше не имеет смысла.) – BFWebAdmin

0

Функция PHP array_values() преобразует ассоциативный массив в числовой индексный массив. Но, как утверждают другие, массив в вашем примере уже численно проиндексирован.

Функция PHP in_array() определяет, присутствует ли конкретное значение в массиве. Это то, что может быть похоже на ваш IN CRITERIA лучший в PHP.

in_array('foo', array('bat','ball'))false, in_array('bat', array('bat','ball')) дает true. Последующие записи в массив добавляются с $array[] = 'foo'; для неассоциативных массивов.

Пожалуйста, прочитайте и обязательно поймите how arrays work in PHP.

+0

Я не хочу, чтобы он преобразовывал его в числовой индексный массив – Harsh

+0

См. комментарий @Mark Baker по вопросу. Кажется, вы действительно не знаете, чего хотите. Было бы полезно указать больше контекста. – syck

2

Суровый, у меня нет нового ответа, просто трюк для вас, чтобы лучше понять, какие массивы находятся на PHP.

Просто проверьте массив с помощью print_r() или var_dump().

Например:

$myArr = ['hello','no','yes']; 
echo "<pre>"; 
print_r($myArr); 
echo "</pre>"; 

Вы увидите в выводе, что значения используемых получат индексы, а BFDatabaseadmin указал.

Теперь, если вы хотите использовать ассоциативные массивы, используйте ключ:

$myArr = ['IPointToHello'=>'hello', 'bananas'=>'no', 'yes'=>'yes']; 
echo "<pre>"; 
print_r($myArr); 
echo "</pre>"; 

Мой совет заключается в проверке любой массив таким образом, когда вы сомневаетесь, как он структурирован, и помните, что элементы ВСЕГДА иметь индекс, даже если вы его не предоставляете.

Последняя вещь: Если вы хотите передать массивы по URL-адресу после вопросительного знака, убедитесь, что вы включили массив в строку (процесс, называемый кодировкой), и сделайте его массивом, когда вы его получите (декодирование).

Функция, подобная json_encode (и json_decode() при приеме), может это сделать. Также используйте url_encode перед тем, как использовать его в URL-адресе, потому что контент должен быть безопасным.

Посмотрите здесь:

http://www.php.net/manual/en/function.json-encode.php

http://www.php.net/manual/en/function.urlencode.php

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