1

这是我在 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']) ."";
 }
 ?>

谢谢。

4

1 回答 1

8

好吧..看起来问题已更新。

你做错了..在多个层面上。我想糟糕的教程是有问题的。

  • 查询

    您应该阅读有关WHERE子句的更多信息,以及如何使用它。这个页面将提供一些基本信息,但你应该找到一些关于 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;
    

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

    而且由于前缀是重复的,因此最好将它们放在单独的表中。至少从标准化的角度来看。

  • 在 PHP 中查询数据库

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

    相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有一个相当不错的 PDO 相关教程

    让我们假设您已经使用 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>';
    }
    

    任何问题 ?

于 2012-06-10T16:05:13.437 回答