2016-04-06 4 views
1

У меня есть массив, который принимает данные из запроса mysql.php sanitize output form array

$mysql = "select distinct name from software"; 
$result = mysqli_query($conn, $mysql); 
    while($myrow = mysqli_fetch_assoc($result)) { 
     $array[] = $myrow; 
} 

То, что я хотел бы сделать, это иметь выходные данные, как:

item1, item2, item3 

В конце концов, что я хочу сделать, это быть в состоянии хранить эту информацию в переменной, чтобы использовать для MySQL запрос

$array = item1, item2, item3 

select * from table where item != ($array) 

Однако я не могу получить данные для вывода правильно,

Если я использую print_r показаны данные и массив хорош.

Если я использую array_key(), я получаю только цифры, как я могу получить имена?

print_r выход:

([0] => Array ([name] => Skype for Business Basic 2016 - en-us) [1] => Array ([name] => Microsoft Visual C++ 2008 Redistributable - x64 9.) [2] => Array ([name] => Microsoft Office 365 Business - en-us) [3] => Array ([name] => Microsoft Silverlight) [4] => Array ([name] => NVIDIA 3D Vision Driver 341.92) [5] => Array ([name] => NVIDIA Graphics Driver 341.92) [6] => Array ([name] => NVIDIA Update 10.4.0) [7] => Array ([name] => NVIDIA HD Audio Driver 1.3.30.1) [8] => Array ([name] => FortiClient)) 
+2

'implode (',', $ array)'? – Federkun

+2

также google для 'sql not in' –

+1

Не можете ли вы объединить 2 запроса в один запрос? – Maximus2012

ответ

1

Когда вы сделаете это:

while($myrow = mysqli_fetch_assoc($result)) { 
    $array[] = $myrow; 
} 

Вы прилагая весь массив строк в $array для каждой строки вы запрашиваете. Вы можете поменять его на

while($myrow = mysqli_fetch_assoc($result)) { 
    $array[] = $myrow['name']; 
} 

только добавить строку имени. Тогда у вас будет массив строк, а не массив массивов, а implode даст вам ожидаемые результаты.

0

Вы можете использовать array_column (PHP 5.5+), чтобы получить нужные значения:

print_r(array_column($array, 'name')); 
0

Вы просто используете выход для второго запроса и больше ничего? Если это так, зачем хранить его в массиве? Вместо этого вы могли бы сделать что-то вроде

$namelist = ""; 
$mysql = "select distinct name from software"; 
$result = mysqli_query($conn, $mysql); 
while($myrow = mysqli_fetch_assoc($result)) { 
    $namelist .= mysqli_real_escape_string($conn, $myrow['name']).","; 
} 
$namelist = substr($namelist, 0, -1); 

Тогда это непосредственно готово к второму запросу, который будет нуждаться НЕ В:

select * from table where item NOT IN ($array) 

Обратите внимание, что это лучшая практика использовать подготовленные заявления через mysqli_real_escape_string, но в в этом случае это должно быть хорошо, поскольку $namelist поступает непосредственно из вашей базы данных.