2015-04-24 3 views
0

Я извлекаю некоторый набор идентификаторов из базы данных и хочу напечатать их запятыми, используя метод php implode().Недопустимые аргументы, переданные в implode

Но это дает мне предупреждение, что я передал недействительные аргументы для взлома. Итак, почему я получаю это предупреждение и как я могу исправить свой код, чтобы разделить запятую id?

<?php 
session_start(); 
if(isset($_SESSION['tstid'])) 
{ 
    $tstid = $_SESSION['tstid']; 
} 
include('references.php'); 
include('config.php'); 
$query = "select * from testquestions where testid='".$tstid."'"; 
$res = mysql_query($query); 

if(mysql_num_rows($res) > 0) 
{ 

    while($fetch = mysql_fetch_array($res)) 
    { 


      $z =implode(', ', $fetch['qid']); 



    } 
    echo $z; 



} 
?> 
+0

Вы уверены, что '$ fetch ['qid']' является массивом? – Ulti

+0

Пожалуйста, [прекратите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и используйте [PDO] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

0

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

while($fetch = mysql_fetch_array($res)) { 
    $z[] = $fetch['qid']; 
    //^^ See here 
} 

echo implode(",", $z); 

Боковые ноты:

mysql_* API является устаревшим и будет удален в будущем. Используйте mysqli with prepared statements, или PDO with prepared statements, они намного безопаснее.

+0

спасибо, сэр ... это сработало –

+0

@ user3567832 Добро пожаловать! (FYI: вы можете принять ответ, который помог вам больше всего и решить вашу проблему (http://meta.stackexchange.com/q/5234)!) – Rizier123

0

Ошибка отображается, поскольку вы передали одно значение implode. Но implode использует array, чтобы преобразовать его в string. Итак, сначала создайте array из Ids, затем implode его запятой (или любым другим) разделение, которое вы хотите использовать).

Лучше использовать этот

if(mysql_num_rows($res) > 0) 
{ 
    $idArr = array(); 
    while($fetch = mysql_fetch_array($res)) 
    { 
     $idArr[] = $fetch['qid'];  
    } 
    $z =implode(', ', $idArr); 
    echo $z; 
} 
0
<?php 
session_start(); 
if(isset($_SESSION['tstid'])) 
{ 
    $tstid = $_SESSION['tstid']; 
} 
include('references.php'); 
include('config.php'); 
$query = "select * from testquestions where testid='".$tstid."'"; 
$res = mysql_query($query); 

if(mysql_num_rows($res) > 0) 
{ 
    $z=array(); 
    while($fetch = mysql_fetch_array($res)) 
    { 


      $z[] =$fetch['qid']; 



    } 
    echo implode(",", $z); 



} 
?> 
1
<?php 
session_start(); 
if (isset($_SESSION['tstid'])) { 
    $tstid = $_SESSION['tstid']; 
} 
include('references.php'); 
include('config.php'); 
$query = "select * from testquestions where testid='".$tstid."'"; 
$res = mysql_query($query); 
if (mysql_num_rows($res) > 0) { 
    $z = array(); 
    while($fetch = mysql_fetch_array($res)) { 
     $z[] = $fetch['qid']; 
    } 
    echo implode(', ', $z); 
} 
?> 

Объяснение: Вы используете implode() в неположенном месте.

Вы должны сначала получить все идентификаторы в массиве, а затем использовать implode()

Выше исправлен код.

ПРИМЕЧАНИЕ: Пожалуйста, не используйте mysql_, поскольку они устарели.

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