使用PDO和SQLIte db查询json_extract

时间:2019-10-13 09:01:14

标签: php json ajax sqlite

请尝试在数据库中采用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"}]

我哪里出错了?

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

可能还会有帮助。

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

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

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

2 个答案:

答案 0 :(得分:0)

您在查询中用双引号引起来,但查询内部有未转义的$

尝试转义:

$result2 = $db->query("SELECT json_extract(events.interni, '\$') FROM events WHERE id='35'");
var_export($result2->fetchAll(PDO::FETCH_ASSOC));

答案 1 :(得分:0)

您可以尝试类似的方法。并且因为您在评论中谈到了使用Ajax进行处理。我也包括了。

为了清楚起见,我还提供了php mysql后端可操作性。所以哟现在有两个选择

1。)PHP和MYSQL

2。)根据您的请求使用SQLITE

index.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);