Php PDO对象';s长度大于预期值

Php PDO对象';s长度大于预期值,php,object,pdo,Php,Object,Pdo,我想用PDO对象中的一些数据创建Javascript数组。这是我的密码: $req = $bdd->query('SELECT id AS user_id, fname AS user_fname, lname AS user_lname FROM mand_users'); $autocomplete_users = '<script type="text/javascript"> var names_users = new Array

我想用PDO对象中的一些数据创建Javascript数组。这是我的密码:

$req = $bdd->query('SELECT 
    id AS user_id, 
    fname AS user_fname, 
    lname AS user_lname
    FROM mand_users');

$autocomplete_users = '<script type="text/javascript"> var names_users = new Array(';
$users_ids = 'var users_ids = new Array(';

$i = -1;

while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) {
    print_r($donnees);
    $i++;

    $user_full_name = $donnees['user_fname'].' '.$donnees['user_lname'];
    $user_id = $donnees['user_id'];

              if ( $i < count($donnees)-1) {

        $autocomplete_users .= $user_full_name.', ';
        $users_ids .= $user_id.', ';

           } else  {

        $autocomplete_users .= $user_full_name.');';
        $users_ids .= $user_id.');';

    }
}

echo $autocomplete_users . $users_ids .'</script>';
所以物体的长度是2。在本例中,JS代码如下所示

<script type="text/javascript">
var names_users = new Array(Bob Smith, Alice Smith);
var users_ids = new Array(1, 2); 
</script>

var names\u users=新数组(Bob Smith,Alice Smith);
var users_id=新数组(1,2);
但是我得到了这个

<script type="text/javascript">
var names_users = new Array(Bob Smith, Alice Smith, var users_ids = new Array(1, 2, </script>

var名称\用户=新数组(Bob Smith,Alice Smith,var用户\用户ID=新数组(1,2,

这意味着
else
中的代码未执行。因此,我使用
count()
检查了对象的长度,结果返回3。您如何解释这一点?

我建议您不要编写代码,因为它太容易出错。 您可以在2个数组中插入数据,然后可以使用类似于添加COMA的东西

$user_ids = array();
$user_names = array();

while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) {
    $name = $donnees['user_fname'].' '.$donnees['user_lname'];
    $id = $donnees['user_id'];

    $user_ids[] = $id;
    $user_names[] = $name;
}

<script>
var names = new Array('<?php implode("', '", $user_names); ?>');
var ids = new Array(<?php implode(", ", $user_ids); ?>);
</script>

(code not tested, just to give you a hint)
$user_id=array();
$user_names=array();
而($donnees=$req->fetch(PDO::fetch_ASSOC)){
$name=$donnees['user\u fname'.'。$donnees['user\u fname'];
$id=$donnees['user_id'];
$user_id[]=$id;
$user_names[]=$name;
}

var names=new Array(“$donnees不会一次保存所有结果,它在while循环中每次迭代只保存一个结果。当计数为3时,这是因为它有3个字段(user\u id、user\u fname、user\u lname)。如果您的查询返回100行,您的计数仍将产生3行,因为您的计数错误

最好为要创建的每个列表创建一个数组,填充该数组而不必担心最后一个条目是哪个,然后在while循环之后执行以下操作:

$autocomplete_users = '<script type="text/javascript"> var names_users = new Array(';
$autocomplete_users .= implode(', ', $autocomplete_users_array);
$autocomplete_users .= ');';
$autocomplete_users='var names_users=新数组(';
$autocomplete\u users.=内爆(“,”,$autocomplete\u users\u数组);
$autocomplete_users.=');

…或者最好是在PHP中构建数组,然后使用json_encode()。

谢谢,我要试试这个。
$autocomplete_users = '<script type="text/javascript"> var names_users = new Array(';
$autocomplete_users .= implode(', ', $autocomplete_users_array);
$autocomplete_users .= ');';