计算两列并回显结果的脚本

Posted

技术标签:

【中文标题】计算两列并回显结果的脚本【英文标题】:Script to count two columns and echo result 【发布时间】:2014-11-05 17:53:43 【问题描述】:

我有一个有效的 SQL 查询,我试图在一个小的 php 脚本中使用它,但遇到 Parse 错误,尝试了很多变体。希望你能帮忙。最终结果将是有一个包含“日期”和“通道号”的两个字段表单,然后给出给定日期的“通道”行数的结果计数。抱歉,相当新的 PHP/SQL,谢谢。

    <?php
// Connect to MSSQL and select the database
$link = mssql_connect('localhost', 'root', '', 'jm_db');
mssql_select_db('jm_db');

// Select all our records from a table

$mysql_query = mssql_query ('SELECT COUNT(*) FROM asterisk_cdr 
WHERE calldate LIKE '%2014-10-11%'
     AND channel LIKE '%SIP/4546975289%');

echo $sql;

?>

我已经重新编写了代码,但是得到“警告:mysql_fetch_array() 期望参数 1 是资源”和未定义的变量。

<?php

// Create connection
$mysqli = new mysqli($localhost, $root, $jm_db);

/* check connection */
if (mysqli_connect_errno()) 
printf("Connect failed: %s\n", mysqli_connect_error());
exit();


$sql = ("SELECT COUNT(*) FROM asterisk_cdr 
    WHERE calldate LIKE '%2014-10-11%'
    AND channel LIKE '%SIP/4546975289%'");

    $results= array();
while ($result = mysql_fetch_array($sql)) 
    $results[]= $result;


foreach($results as $result)
    echo $result['calldate'] . " " . $result['channel']; 


?>

【问题讨论】:

旁注:您使用了错误的变量来回显它应该是 $mysql_query 而不是 $sql - 您还缺少报价。 ("SELECT COUNT(*) FROM asterisk_cdr WHERE calldate LIKE '%2014-10-11%' AND channel LIKE '%SIP/4546975289%'") 试试看,这可能会修复你的代码。 您的 $mysql_query 变量的单引号数量不匹配 (')。 您使用的是 MySQL 还是 Microsoft SQL Server? @JayBlanchard 似乎 OP 正在使用后者。得到一个解析错误,所以这告诉我它正在工作,有点。但是缺少引号和没有使用双引号封装是主要错误。 【参考方案1】:

您缺少一个引号(Stack 的语法突出显示向您显示),但它应该替换为一个开始的双引号并以相同的结尾。您不能使用所有单引号。

我用双引号替换了开始的单引号,以及匹配的结束双引号。

$mysql_query = mssql_query ("SELECT COUNT(*) FROM asterisk_cdr 
WHERE calldate LIKE '%2014-10-11%'
     AND channel LIKE '%SIP/4546975289%'");

作为旁注,您回显了错误的变量。

但是,这不是您回显结果的方式,而是使用循环。

类似的东西,并将Fieldname 替换为您要使用的:

while ($row = mssql_fetch_assoc($mysql_query)) 

    print $row['Fieldname'] . "\n";


或使用mssql_fetch_array()

你也可以使用:

$results= array();
while ($result = mssql_fetch_array($mysql_query)) 
    $results[]= $result;


foreach($results as $result)
    echo $result['calldate'] . " " . $result['channel']; 


有关Microsoft SQL Server功能的更多信息,请咨询:

http://php.net/manual/en/book.mssql.php

【讨论】:

为什么总是mssql_query? @michael 似乎是 OP 使用的 php.net/manual/en/function.mssql-query.php mssql_query() 是一种有效的方法。 干杯!因为$mysql和mssql_而感到困惑【参考方案2】:
    $mysql_query = mssql_query ('SELECT COUNT(*) FROM asterisk_cdr 
    WHERE calldate LIKE '%2014-10-11%'
    AND channel LIKE '%SIP/4546975289%');

    while($row=mssql_fetch_array($mysql_query))
    
    echo $row[0];
    

【讨论】:

我不能等一会儿,但我确实注意到 Aashu 放了 while($row=mssql_fetch_array($mysql_query)),它是 MsSQL?我从一开始就错了,因为我使用的是 MySQL 数据库。【参考方案3】:
    $mysqli = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($mysqli->connect_error) 
    die("Connection failed: " . $mysqli->connect_error);


$mysql_query = mysqli ("SELECT COUNT(*) FROM asterisk_cdr WHERE calldate LIKE '%2014-10-11%' AND channel LIKE '%SIP/4546975289%'");

while ($row = mysql_fetch_array($mysql_query, MYSQL_ASSOC)) 
   echo ($row["channel"]);

【讨论】:

行的致命错误显示:$mysql_query = mysqli 致命错误:调用未定义函数 mysqli()。为什么会失败?【参考方案4】:

这是一个使用 PDO 的简单示例

<?php
  try 
    $dns  = 'mysql:host=localhost;dbname=jm_db';
    $user = 'root';
    $pass = '';

    $options = array(
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    );
    $cnx = new PDO( $dns, $user, $pass, $options );
    $select = $cnx->query("SELECT COUNT(*) as count FROM asterisk_cdr WHERE calldate LIKE '%2014-10-11%' AND channel LIKE '%SIP/4546975289%'");

    $select->setFetchMode(PDO::FETCH_OBJ);

    while( $row = $select->fetch() )
    
      echo '<h1>', $row->count , '</h1>';
    
   catch ( Exception $e ) 
    echo "Connect failed : ", $e->getMessage();
    die();
  

【讨论】:

啊等一下,mssql/mysql。这是一个错字,我使用的是 MySQL,这是错误的吗?我知道,但是我是新手! 我已在 SO 的帮助下将更新后的代码粘贴到此处,但仍然收到警告和错误提示“m​​ssql_fetch_array”。 只有一个错误。致命错误:调用未定义函数 mysqli()。 我得到的错误是“已弃用:mysql_connect():mysql 扩展已弃用,将来将被删除:改用 mysqli 或 PDO”还有“注意:未定义索引:通道” 这里是 PDO 的更新,将 columnName1 和 columnName2 替换为您要打印的列...

以上是关于计算两列并回显结果的脚本的主要内容,如果未能解决你的问题,请参考以下文章

抓取页面然后计算某个类的 div 数并回显该数字

Excel VBA代码过滤两列并提取数据

比较两个excel的两列并返回第三列

合并两列并按 asc 排序

Pandas DataFrame Groupby 两列并获取计数

同时迭代两列并根据条件更改单元格的值