1

尝试在数据库中采用 JSON,因为我的数据不固定。我可以从终端很好地查询,并且需要将相同的查询写入 php 脚本。我花了很多时间才问。例子:

sqlite> select json_extract(events.interni, '$') from events WHERE id='35';
output
[{"student_id":"12","student_name":"Lisa Ochoa"},{"student_id":"21","student_name":"Rafael Royal"}]

其中 id = 35 将成为 $ _POST ['id'] 的变量

我尝试了什么:

$result2 = $db->query("select json_extract(events.interni, '$') from events WHERE id='35'");
var_dump($result2->fetchAll(PDO::FETCH_ASSOC));
return [] <- empty array
i want instead = [{"student_id":"21","student_name":"Rafael Royal"}]

我哪里做错了?

我在 SO https://stackoverflow.com/a/33433552/1273715上遵循了这个答案, 但我需要在 php 中移动查询以进行 ajax 调用

可能的另一个帮助。

$ajax 调用的结果可以用作键值还是保留字符串?另一方面,我可以将字符串转换为对象,例如学生 = new Object()?

我在 js 环境中需要的 eaxaple - 计算数组中的对象 - 并循环键值

var data = [{"student_id":"12","student_name":"Lisa Ochoa"},{"student_id":"21","student_name":"Rafael Royal"}]
consolle.log(JSON.Stringify(data));

在这里我想避免使用反斜杠

consolle.log(JSON.Stringify(data.lenght));
in this phase the desired data is = 2

非常感谢任何可能的帮助

UPDATE

离开 json_extract() 函数我已经解决了第二个问题,所以现在我可以使用对象属性,最后对数组中的对象进行计数很重要:

<?php      
        try {
            $db = new PDO('sqlite:eventi.sqlite3');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch (PDOException $e) {
        echo "I'm sorry, Dave. I'm afraid I can't do that.";
            echo $e->getMessage();
        } 
    $risultato = $db->query("SELECT * FROM events WHERE id = '35'", PDO::FETCH_ASSOC);

    $result = array();

    foreach ($risultato as $row) {
             $result[] = $row;
         }
       //  echo "Results: ", json_encode($result), "\n"; this produced backslash             
        echo $result[0]['interni'];    

    ?>

js部分

var num='';
$.ajax({
  url: "sqlitedb/test-con.php", 
  type: 'POST',
  dataType: 'json',
  success:function(result){
     console.log(result[0].student_id+ " - "+ result[0].student_name); // output here is good: 12 - Lisa Ochoa
     counter(Object.keys(result).length);       
}});

function counter (numero){
  console.log("num2: =" + numero);  
}

//out put here: 2
perfect!

奇怪的行为:

console.log(result[0].student_id+ " - "+ result[0].student_name);
12 - Lisa Ochoa

outup 是对的,但是

 console.log(result.lenght);
output is null
4

2 回答 2

1

你可以尝试这样的事情。并且因为您在评论中说要使用 ajax 来处理它。我也包括在内。

为了清楚起见,我还包括了 php mysql 后端的可操作性。所以你现在有两个选择

1.) PHP 与 MYSQL

2.) PHP WITH SQLITE 按照您的要求

索引.html

<script src="jquery-3.1.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">

$(document).ready(function(){
$.ajax({
type: 'get',
url: 'data.php',
dataType: 'JSON',
cache:false,
success: function(data){

var length = data.length;
for(var s=0; s<length; s++){

var student_id = data[s].student_id;
var student_name = data[s].student_name;


var res = "<div>" +
"<b>student_id:</b> " + student_id + "<br>" +
"<b>student_name:</b> " + student_name + "<br>" +
"</div><br>";

$("#Result").append(res);

}
}

    });

});


</script>

<body>
<div id="Result" ></div>
</body>

mysql 数据库中,您可以这样做。

<?php

$host = "localhost"; 
$user = "ryour username"; 
$password = "your password"; 
$dbname = "your bd name";

$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
echo "cannot connect to db";
}

$return_arr = array();
$query = "SELECT id, student_id, student_name FROM events where id='35'";
$result = mysqli_query($con,$query);

while($row = mysqli_fetch_array($result)){
    $student_id = $row['student_id'];
    $student_name = $row['student_name'];

    $return_arr[] = array("student_id" => $student_id,
                    "student_name" => $student_name);
}

// Encoding array in JSON format
echo json_encode($return_arr);

?>

所以使用sqlitedb这样的东西对你有用

$return_arr = array();
$result2 = $db->query("SELECT id, student_id, student_name FROM events where id='35'");
$result2->execute(array());

//$result2 = $db->query("SELECT * FROM events where id='35'");
//$result =$result2->fetchAll(PDO::FETCH_ASSOC));

while($row = $result2->fetch()){
    $student_id = $row['student_id'];
    $student_name = $row['student_name'];

    $return_arr[] = array("student_id" => $student_id,
                    "student_name" => $student_name);
}

// Encoding array in JSON format
echo json_encode($return_arr);
于 2019-10-13T10:24:22.310 回答
0

You are surrounding you query with double quotes but inside the query there is an unescaped $.

Try escaping it:

$result2 = $db->query("SELECT json_extract(events.interni, '\$') FROM events WHERE id='35'");
var_export($result2->fetchAll(PDO::FETCH_ASSOC));
于 2019-10-13T09:54:51.810 回答