Javascript 在PDO的JS代码中使用PHP数组

Javascript 在PDO的JS代码中使用PHP数组,javascript,php,jquery,mysql,pdo,Javascript,Php,Jquery,Mysql,Pdo,我试图在JS中使用PHP数组,但遇到了我不知道如何修复的错误 我使用了这个例子(在我的例子中,是PDO,不是mysqli): $pdo=newpdo('mysql:host=localhost;dbname='.$db\u name.';charset=utf8mb4',$db\u user,$db\u password); $pdo->setAttribute(pdo::ATTR_EMULATE_PREPARES,false); $pdo->setAttribute(pdo::ATTR_ERR

我试图在JS中使用PHP数组,但遇到了我不知道如何修复的错误

我使用了这个例子(在我的例子中,是PDO,不是mysqli):

$pdo=newpdo('mysql:host=localhost;dbname='.$db\u name.';charset=utf8mb4',$db\u user,$db\u password);
$pdo->setAttribute(pdo::ATTR_EMULATE_PREPARES,false);
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_异常);
$type_zagon=1;
$id_kurat=1;
$usid=78;
$stmt1=$pdo->prepare(“从tb_zagon_id中选择num,其中status=:status
和type=:type和zagon_id=:zagon_id和user_id=:usid ORDER BY num”);
$num=$stmt1->fetchColumn();
$stmt1->执行(数组)(
“:状态”=>1,
“:type”=>$type_zagon,
“:zagon_id”=>$id_kurat,
“:usid”=>$usid
));
$gyvuliu_数组=数组();
而($stmt1->fetch(PDO::fetch_ASSOC)){
$gyvuliu_数组[]=$num;
}
$array_encode=json_encode($gyvuliu_数组);
?>              
$('.surinkti_produkcija_paserti_gyvulius')。单击(函数(){
var gyvuliai_fermoje=“”;
var gyvuliu_数组=[1,2,3,4,5,6,7,8,9];
对于(var i=0,l=gyvuliu_array.length;i
var gyvuliai_fermoje=);

您必须删除引号,为什么?如果您将值放在引号中,表示
var gyvuliai_fermoje
是字符串而不是数组

您能尝试一下吗

 $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>
$stmt1=$pdo->prepare(“从tb_zagon_id中选择GROUP_CONCAT(num)作为nums,其中status=:status
和type=:type和zagon_id=:zagon_id和user_id=:usid ORDER BY num”);
$stmt1->执行(数组)(
“:状态”=>1,
“:type”=>$type_zagon,
“:zagon_id”=>$id_kurat,
“:usid”=>$usid
));
$row=$stmt1->fetch();
$array_encode=json_encode(分解(“,”,$row[“nums”);
?>
var gyvuliai_fermoje=;
$('.surinkti_produkcija_paserti_gyvulius')。单击(函数(){
var gyvuliu_数组=[1,2,3,4,5,6,7,8,9];
对于(var i=0,l=gyvuliu_array.length;i试试这个

var gyvuliai_fermoje = <?php echo json_encode($array_encode, JSON_HEX_QUOT | JSON_HEX_APOS); ?>;
var gyvuliai_fermoje=;
问题解决了!:)对于未来的访客,结合你们所说的所有内容,我们有以下代码:

// 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连接
$pdo=new-pdo('mysql:host=localhost;dbname='。$db_name';
字符集=utf8mb4',$db\u user,$db\u password);
$pdo->setAttribute(pdo::ATTR_EMULATE_PREPARES,false);
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_异常);
//带占位符的准备语句
$stmt1=$pdo->prepare(“从tb_zagon_id中选择num,其中status=:status
和type=:type和zagon_id=:zagon_id和user_id=:usid ORDER BY num”);
//将查询结果绑定到$num变量(1是第一列)
$stmt1->bindColumn(1,$num);
//执行查询并用一些变量替换占位符
$stmt1->执行(数组)(
“:状态”=>1,
“:type”=>$type_zagon,
“:zagon_id”=>$id_kurat,
“:usid”=>$usid
));
//创建PHP数组
$gyvuliu_数组=数组();
//使用$num变量((int)获取数组并插入查询结果以确保值是整数)
而($stmt1->fetch(PDO::fetch_ASSOC)){
$gyvuliu_数组[]=(int)$num;
}
//对PHP数组进行编码,以便我们能够在JS代码中使用它
$array_encode=json_encode($gyvuliu_数组);
?>
var gyvuliai_fermoje=;
对于(变量i=0;i

我希望它能帮助您理解如何在PDO中的JS代码中使用PHP数组:)

我认为您需要使用
bindColumn
而不是
fetchColumn
来使
$num
fetch()
调用后自动更新
谢谢大家,将这两件事结合起来,效果很好。但我注意到一点:为什么数字“37”在哪里,而所有数组项都是字符串,而不是数字?数字“37”表示浏览器的控制台正在记录完全相同的内容37次,并将它们分组在一起。它们是字符串而不是数字的原因是
$num
可能是字符串。如果您100%确定它始终是数字,则可以将其转换为
(int)$num
将其添加到
$gyvuliu_数组时
。如果我删除它们,数字“37”将消失,但现在它显示了非常奇怪的结果:它应该是这样的,控制台就是这样记录字符串的Javascript数组的。以前,控制台记录的字符串看起来像字符串数组(37次)谢谢你的回答,我想我已经找到了解决办法:)谢谢你的回答,我想我已经找到了解决办法:)
 $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>
var gyvuliai_fermoje = <?php echo json_encode($array_encode, JSON_HEX_QUOT | JSON_HEX_APOS); ?>;
// 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>