php - PHP 中的 MySQL 查询

标签 php mysql json

这是我在 MySQL 中的实际查询:

 SELECT sndprefix, COUNT(*) FROM `inbox` WHERE
 (
 sndprefix='22' OR 
 sndprefix='23' OR 
 sndprefix='32' OR 
 sndprefix='33' OR 
 sndprefix='34' OR 
 sndprefix='42' OR 
 sndprefix='43'
 ) 
 GROUP BY sndprefix;

我得到正确的响应,例如:

 sndprefix  COUNT(*)
 22     3
 23     5
 32     1
 33     1
 43     1

我的问题是在浏览器中显示此查询并解析为 json 格式的 PHP 代码是什么。

提前致谢。

如果我没有早点发布代码,我深表歉意,我试图让自己熟悉 stackoverlow 的 UI,找到编辑选项..

这是我到目前为止尝试过的代码:

 <?php
 $query="SELECT sndprefix, COUNT(*) FROM `inbox` WHERE
 (
 sndprefix='22' OR 
 sndprefix='23' OR 
 sndprefix='32' OR 
 sndprefix='33' OR 
 sndprefix='34' OR 
 sndprefix='42' OR 
 sndprefix='43'
 ) 
 GROUP BY sndprefix;";

 $result = mysql_query($query);
while($sunget = mysql_fetch_array($result)){
    foreach($sunget AS $key => $value) { $conget[$key] = stripslashes($value); }
 echo "". nl2br( $sunget['sndprefix']) ."";
 }
 ?>

谢谢。

最佳答案

嗯..看起来问题已经更新了。

你在多个层面上都做错了。我想教程不好是有问题的。

  • 查询

    您应该阅读有关 WHERE 子句的更多信息,以及如何使用它。 This page将提供一些基本信息,但您应该找到一些关于 MySQL 的书(并且只关于 MySQL,不包括 PHP)。

    这将使查询更易于阅读:

    SELECT 
        sndprefix AS prefix, 
        COUNT(*) AS count 
    FROM inbox 
    WHERE sndprefix IN ('22', '23', '32', '33', '34', '42', '43') 
    GROUP BY sndprefix;
    

    另外,您可能想了解 JOIN MySQL 中的语句,因为我有一种感觉,这个特定前缀列表有一些共同点。

    而且由于前缀是重复的,所以将它们放在单独的表格中可能会更好。至少来自 normalization观点。

  • 用PHP查询数据库

    您不应该使用古老的 mysql_* 函数编写新代码。它们不再维护,社区已经开始 deprecation process ,现在甚至在手册中添加了警告:(参见 red box)。

    相反,您应该了解 prepared statements并使用 PDOMySQLi .如果您不能决定,this article会帮助选择。如果你想学习,here is a quite good PDO-related tutorial .

    假设您已经使用 PDO 与数据库交互(我只是更喜欢它而不是 MySQLi)。

    $connection = new PDO(
                      'mysql:host=localhost;dbname=my_magc_db;charset=UTF-8', 
                      'username', 'password');
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    // the connection has been established, and object configured
    
    $sql = 'SELECT 
                sndprefix AS prefix, 
                COUNT(*) AS count 
            FROM inbox 
            WHERE sndprefix IN ('22', '23', '32', '33', '34', '42', '43') 
            GROUP BY sndprefix';
    
    $statement = $connection->query( $sql );
    // no need to prepare the statement this time, because values are predefined
    // if values '22', '23', etc. depend on user input, code would be different
    
    $data = $statement->fetchAll(PDO::FETCH_ASSOC);
    // now $data contains all the values.
    // you van use var_dump($data) to "look inside" variable
    
  • 制作 JSON

    因为$data 已经是一个包含所有值的数组,你可以简单地写成这个
    echo json_encode( $data );生成 JSON。

  • 输出

    既然你已经有了数组,你可以写:

    foreach ( $data as $row ) {
        echo $row['prefix'], ' ', $row['count'], PHP_EOL, '<br>';
    }
    

    有什么问题吗?

关于php - PHP 中的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968552/

相关文章:

Android JSONArray长度值0

json - Spring默认消费和生产

php - 在本地环境中禁用 laravel 的 Sentry

php - PHP-检测另一个对象上的更改

php - 使用 phinx 迁移库在非主键列上自动递增

php - laravel Eloquent 查询中的位置不适用于两个数组

MySQL 如何创建从另一个表中进行选择的触发器?

java - 基于 Jackson Delegate 的创建者是否有某种方法可以访问原始 Json 字符串?

php - 2个复选框之间的链接问题,在不应该插入数据时插入数据

php - 如何让我的单词解读器返回更相关的结果