Запрос json_extract с помощью PDO и базы данных SQLIte - PullRequest
1 голос
/ 13 октября 2019

Попробуйте принять 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

, возможно, другая помощь.

Можетрезультат вызова fron $ ajax может использоваться в качестве значения ключа или оставаться строкой? в других руках я могу преобразовать строку в объект, например ученики = новый объект ()?

как мне нужно в среде 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 part

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

выход верен, но

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

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Вы можете попробовать что-то вроде этого. и так как вы сказали в комментарии о приближении к нему с помощью AJAX. Я включил это также.

Я также включил удобство работы с PHP php mysql для ясности. поэтому у вас теперь есть два варианта

1.) PHP с MYSQL

2.) PHP с 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);
0 голосов
/ 13 октября 2019

Вы окружаете свой запрос двойными кавычками, но внутри запроса есть неэкранированный $.

Попробуйте экранировать его:

$result2 = $db->query("SELECT json_extract(events.interni, '\$') FROM events WHERE id='35'");
var_export($result2->fetchAll(PDO::FETCH_ASSOC));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...