在 PDO 的 JS 代码中使用 PHP 数组
Posted
技术标签:
【中文标题】在 PDO 的 JS 代码中使用 PHP 数组【英文标题】:Using PHP array in the JS code in PDO 【发布时间】: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
。
【参考方案1】:
var gyvuliai_fermoje = <?php echo $array_encode; ?>;
您必须删除引号,为什么?如果将值放在引号中,则表示 var gyvuliai_fermoje
是字符串而不是数组
【讨论】:
如果我删除它们,数字“37”会消失,但现在显示非常奇怪的结果:prntscr.com/ft4h8c 这就是它的外观,这就是控制台记录 Javascript 字符串数组的方式。您之前所拥有的是控制台记录一个 看起来 像字符串数组(37 次)的字符串。【参考方案2】:你可以试试这个吗
$stmt1 = $pdo->prepare("SELECT GROUP_CONCAT(num) as nums FROM tb_zagon_id WHERE status = :status
AND type = :type AND zagon_id = :zagon_id AND user_id = :usid ORDER BY num");
$stmt1->execute(array(
':status' => 1,
':type' => $type_zagon,
':zagon_id' => $id_kurat,
':usid' => $usid
));
$row = $stmt1->fetch();
$array_encode = json_encode(explode(",",$row["nums"]));
?>
<script>
var gyvuliai_fermoje = <?php echo $array_encode; ?>;
$('.surinkti_produkcija_paserti_gyvulius').click(function()
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>
【讨论】:
谢谢你的回答,我想我已经找到了解决办法:)【参考方案3】:试试这个
var gyvuliai_fermoje = <?php echo json_encode($array_encode, JSON_HEX_QUOT | JSON_HEX_APOS); ?>;
【讨论】:
谢谢你的回答,我想我已经找到了解决办法:)【参考方案4】:问题解决了! :) 对于未来的访问者,结合你们所说的所有这些东西,我们有这个代码:
// PDO Connection
$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);
// Prepared statement with placeholders
$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");
// Binding query result to the $num variable (1 is the first column)
$stmt1->bindColumn(1, $num);
// Executing query and replacing placeholders with some variables
$stmt1->execute(array(
':status' => 1,
':type' => $type_zagon,
':zagon_id' => $id_kurat,
':usid' => $usid
));
// Creating a PHP array
$gyvuliu_array = array();
// Fetching through the array and inserting query results using $num variable ((int) makes sure a value is an integer)
while ($stmt1->fetch(PDO::FETCH_ASSOC))
$gyvuliu_array[] = (int)$num;
// Encoding PHP array so we will be able to use it in the JS code
$array_encode = json_encode($gyvuliu_array);
?>
<script>
var gyvuliai_fermoje = <?php echo $array_encode; ?>;
for (var i = 0; i < gyvuliai_fermoje.length; i++)
// Stuff you would like to do with this array, access elements using gyvuliai_fermoje[i]
</script>
希望能帮助你理解如何在 PDO 的 JS 代码中使用 PHP 数组:)
【讨论】:
以上是关于在 PDO 的 JS 代码中使用 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中,是不是可以使用 PDO 获取一维数组? [复制]