【发布时间】:2017-12-12 14:07:23
【问题描述】:
我正在尝试在 JS 中使用 PHP 数组,但遇到了我不知道如何修复的错误。
我使用的是这个例子(在我的例子中 - 它是 PDO,而不是 mysqli。):Inserting MYSQL results from PHP into Javascript Array
$pdo = new PDO('mysql:host=localhost; dbname=' . $db_name . '; charset=utf8mb4', $db_user, $db_password);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$type_zagon = 1;
$id_kurat = 1;
$usid = 78;
$stmt1 = $pdo->prepare("SELECT num FROM tb_zagon_id WHERE status = :status
AND type = :type AND zagon_id = :zagon_id AND user_id = :usid ORDER BY num");
$num = $stmt1->fetchColumn();
$stmt1->execute(array(
':status' => 1,
':type' => $type_zagon,
':zagon_id' => $id_kurat,
':usid' => $usid
));
$gyvuliu_array = array();
while ($stmt1->fetch(PDO::FETCH_ASSOC)) {
$gyvuliu_array[] = $num;
}
$array_encode = json_encode($gyvuliu_array);
?>
<script>
$('.surinkti_produkcija_paserti_gyvulius').click(function() {
var gyvuliai_fermoje = '<?php echo $array_encode; ?>';
var gyvuliu_array = [1,2,3,4,5,6,7,8,9];
for (var i=0, l=gyvuliu_array.length; i<l; i++) { // WORKS
console.log(gyvuliu_array[i]);
}
// DOESN'T WORK (console returns f,a,l,s,e,f,a,l,s,e and so on..)
for (var i=0, l=gyvuliai_fermoje.length; i<l; i++) {
console.log(gyvuliai_fermoje[i]);
}
});
</script>
我猜 $num 变量有问题,但我不确定。
编辑: 我已经更改了第二个 for 循环,看起来它正在工作:
for (var i=0, l=gyvuliai_fermoje.length; i<l; i++) {
console.log(gyvuliai_fermoje[i]);
}
但我不确定它们不在同一行是否可以。 http://prntscr.com/ft4i9m
编辑 2 在 rickdenhaan 的评论之后,它看起来正是第一个 for 循环。可以吗?我做完了吗?
【问题讨论】:
-
我认为您需要使用
bindColumn而不是fetchColumn以使$num在fetch()调用后自动更新。 -
还有
console.log(gyvuliai_fermoje) -
谢谢你们,将这两件事结合起来效果很好。但是我注意到了一件小事:为什么数字“37”在哪里,而所有数组项都是字符串,而不是数字? prntscr.com/ft4glu
-
数字“37”表示浏览器的控制台正在记录完全相同的内容 37 次,并将它们组合在一起。它们是字符串而不是数字的原因是因为
$num可能是一个字符串。如果您 100% 确定它始终是一个数字,则可以在将其添加到$gyvuliu_array时将其转换为(int)$num。
标签: javascript php jquery mysql pdo