MySql / PHP 警报系统不只报告一个看似随机的数据

Posted

技术标签:

【中文标题】MySql / PHP 警报系统不只报告一个看似随机的数据【英文标题】:MySql / PHP Alert system not reporting only one seemingly random piece of data 【发布时间】:2014-05-29 15:42:14 【问题描述】:

我已经建立了一个使用情况报告系统来通知用户他们使用了太多数据。突然,随机线路停止报告。我以为输入的数据只是一个错误,但我已经彻底检查过,找不到发生这种情况的原因。

这是我的设置:

警报系统:

#!/usr/bin/php -q
<?php

$db_host = "localhost"; 
$db_username = "XXX"; 
$db_pass = "XXX"; 
$db_name = "XXX"; 
mysql_connect("$db_host","$db_username","$db_pass") or die(mysql_error()); 
mysql_select_db("$db_name") or die ("no database");

$sql =  "SELECT date,phonenumber,email, dataplan AS currentplan, SUM(datamb) AS value_sum FROM maindata2 GROUP BY phonenumber, dataplan";


$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
if ($result) 
  $row = mysql_fetch_assoc($result);
  $plan = $row['currentplan'] ;
  $date = $row['date'] ;
  $inventory = ROUND ($row["value_sum"],2) ;
  $recipient = $row['email'];
  $line = $row['phonenumber'];
  if ($inventory > (.75 * $plan)) 
    $msg = "message";
    mail($recipient,, "Alert from ", $msg);
  

else 
  $msg = "An error occurred: " . mysql_error();
  mail($recipient, "Alert from ", $msg, $headers);







?>

我使用的数据如下:

"5/28/2014","xxx-xxx-0904","20","email@email.com, email@email.com, email@email.com","461.80","email@email.com"
"5/28/2014","xxx-xxx-0905","20","email@email.com, email@email.com, email@email.com","418.80","email@email.com"
"5/28/2014","xxx-xxx-0906","20","email@email.com, email@email.com, email@email.com","461.80","email@email.com"

中间线不报告,所有其他人都报告。任何想法都会很棒,我尝试将分组更改为所有可能的组合,但我无法让中间线报告。

【问题讨论】:

if ($inventory > (.75 * $plan) 是的,plan是20的值,用法是400+的值,所以远超限额,应该报 try: while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 另外,你的 if($result) 应该在你的 while 之上。 【参考方案1】:

您在检查值之前调用了两次mysql_fetch_assoc。所以你只处理每隔一行。在调用mysql_fetch_assoc 之前,您必须测试$result 是否为假。此外,自 PHP 5.5 起,mysql 扩展已被弃用,您应该将代码重写为 mysqli 或 PDO。

if ($result) 
    while ($row = mysql_fetch_assoc($result))
        $plan = $row['currentplan'] ;
        $date = $row['date'] ;
        $inventory = ROUND ($row["value_sum"],2) ;
        $recipient = $row['email'];
        $line = $row['phonenumber'];
        if ($inventory > (.75 * $plan)) 
            $msg = "message";
            mail($recipient,, "Alert from ", $msg);
        
    
 else 
    $msg = "An error occurred: " . mysql_error();

【讨论】:

注意这里的 src 在顶部有 if ($result)。如果 $result 为 false,您不想尝试做任何事情,因为 mysql 返回错误或没有结果。很好的答案。

以上是关于MySql / PHP 警报系统不只报告一个看似随机的数据的主要内容,如果未能解决你的问题,请参考以下文章

基于PHP+mysql的随书光盘资源管理系统

array_rand() 函数

iOS Swift:如何创建像 UIAlertView 这样看似在解雇后自行消失的对象

《PHP, MySQL, Javascript和CSS》读书随手记----MySQL篇

如何从mssql随机取出一条记录,看似很简单的问题

AJAX 功能在没有警报的情况下不起作用