请尝试在数据库中采用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
答案 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);