计算两列并回显结果的脚本
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.phpmssql_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 的帮助下将更新后的代码粘贴到此处,但仍然收到警告和错误提示“mssql_fetch_array”。 只有一个错误。致命错误:调用未定义函数 mysqli()。 我得到的错误是“已弃用:mysql_connect():mysql 扩展已弃用,将来将被删除:改用 mysqli 或 PDO”还有“注意:未定义索引:通道” 这里是 PDO 的更新,将 columnName1 和 columnName2 替换为您要打印的列...以上是关于计算两列并回显结果的脚本的主要内容,如果未能解决你的问题,请参考以下文章