Php PDO对象';s长度大于预期值
我想用PDO对象中的一些数据创建Javascript数组。这是我的密码: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
$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 .= ');';