【问题标题】:How can I get all values of a mysql table in JSON from a php script?如何从 php 脚本中获取 JSON 格式的 mysql 表的所有值?
【发布时间】:2011-04-27 16:34:52
【问题描述】:

这是一个从 mysql (一行) 获取表值的 php 脚本。 & 以 JSON 形式回显

<?php  
      $username = "user";  
      $password = "********";  
      $hostname = "localhost";  
      $dbh = mysql_connect($hostname, $username, $password) or die("Unable to 
      connect to MySQL");  
      $selected = mysql_select_db("spec",$dbh) or die("Could not select first_test");  
      $query = "SELECT * FROM user_spec";  
      $result=mysql_query($query);     
      $outArray = array(); 
      if ($result) { 
      while ($row = mysql_fetch_assoc($result)) $outArray[] = $row; 
       } 
      echo json_encode($outArray);  
?> 

这是用于接收和打印 json 数据的 HTML 文件。
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> //$('document').ready(function() {

    function Preload() {
    $.getJSON("http://localhost/conn_mysql.php", function(jsonData){  
    $.each(jsonData, function(i,j)
    { alert(j.options);});
    });} 

// });
    </script></head>

    <body onLoad="Preload()">
    </body>

</html> >

【问题讨论】:

  • 你问过这个了吗? stackoverflow.com/questions/3963057/…
  • 不,代码是相同的,我问过其他早期的事情,但现在有了一些清晰和添加的代码,我有新的问题比以前的问题更重要。但如果有什么特别需要关心的,请告诉我。

标签: php javascript mysql html json


【解决方案1】:

您的 PHP 需要实际将所有行放在一起:

$query = "SELECT * FROM user_spec"; 
$result=mysql_query($query);    
$outArray = array();
if ($result) {
  while ($row = mysql_fetch_assoc($result)) $outArray[] = $row;
}
echo json_encode($outArray);

您的 Javascript 需要查看每一行..

$.getJSON("/whatever.php", function(jsonData) { 
   for (var x = 0; x < jsonData.length; x++) {
      alert(jsonData[x].options);
   }
});

【讨论】:

  • 你用准确的 php 语法输入了 ech 行吗?
  • @babar for each 在 javascript 代码中,而不是 PHP 端。
  • 你确定每个循环都有 javascript 吗?
  • 是的,它没有输出。如果我运行 php 脚本,则输出为 [{"options":"smart_exp"}] 其中 options 是列的名称和 smart_exp 第一行。
  • 好的,它在 javascript 中称为“for in”循环,其语法为“for(var row in jsonData){alert(row.options);}”但它会打开一个警告说“ undefined' 使用你的代码,而不是值在 HTML 中输出,而 php 输出 [{"options":"smart_exp"}],'smart_exp' 是 'options' 列中的第一个值。
【解决方案2】:
<?php 
    $username = "user"; 
    $password = "********"; 
    $hostname = "localhost"; 
    $dbh = mysql_connect($hostname, $username, $password) or die("Unable to connect 
         to MySQL"); 
    $selected = mysql_select_db("spec",$dbh) or die("Could not select first_test"); 
    $query = "SELECT * FROM user_spec"; 
    $result=mysql_query($query);

    $_ResultSet = array();

    while ($row = mysql_fetch_assoc($result)) {
       $_ResultSet[] = $row;
    }
       echo json_encode($_ResultSet); 
?>

你的 jQuery 看起来像:

$.getJSON("/yourscript.php", function(data) {
    $.each(data, function(i, j) {
        // use: j.columnName
    });
});

祝你好运

【讨论】:

  • 我无法评论 Fosco 的答案,但如果查询返回多于一行,您的示例将不起作用。只有第一个会返回给 getJSON。
【解决方案3】:

mysql_fetch_assoc 只会从数据库返回一行。您将需要一个循环来检索所有行:

$data = array();
while ($row = mysql_fetch_assoc($result)) {
    // add some or all of $row to the $data array
}
echo json_encode($data);

【讨论】:

  • 您的解决方案也与 Fosco 问题相同,但差别不大。 HTML 的输出是相同的,即警告框输出“未定义”。而 php 中的 urs json echo 输出列的最后一个 'options' 值,而 Fosco 的 json echo 输出 options 列的第一个 'options' 值。
猜你喜欢
  • 2023-03-13
  • 2017-10-07
  • 2014-01-14
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2017-06-26
  • 1970-01-01
相关资源
最近更新 更多