【问题标题】: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 正在使用后者。得到一个解析错误,所以这告诉我它正在工作,有点。但是缺少引号和没有使用双引号封装是主要错误。

标签: php sql mysqli


【解决方案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功能的更多信息,请咨询:

【讨论】:

【解决方案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 替换为您要打印的列...
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
相关资源
最近更新 更多