使用.php将数据写入数据库

时间:2017-07-14 21:02:58

标签: php phpmyadmin

有人可以在此代码中指出错误吗?我无法将数据更新到数据库。我们正在向服务器发送文本消息,此文件在此处解码并将其设置在数据库中。但是这里的情况由于某种原因不起作用。我检查并尝试进行故障排除,但无法找到问题。

case 23:
  // Gather Variables
  $Message = preg_replace("/\s+/","%20", $Message);

  $UnixTime = time();
  $cycle = explode(":", $Message);
  $machine_press = $cycle[0];
  $machine_pct_full = $machine_press/20;
  $machine_cycles_return = $cycle[1];
  $machine_cycles_total = $cycle[2];

 // Build SQL Statement to update static values in the machine table
 $sql = "UPDATE `machines` SET `machine_last_run`=".$UnixTime.",`machine_press`=".$machine_press.",`machine_pct_full`=".$machine_pct_full.",`machine_cycles_return`=".$machine_cycles_return.",`machine_cycles_total`=".$machine_cycles_total." WHERE `machine_serial`='$MachSerial'";

 // Performs the $sql query on the server to update the values
 if ($conn->query($sql) === TRUE) {
   // echo 'Entry saved successfully<br>';
 } else {
    echo 'Error: '. $conn->error;
 }


  $sql = "INSERT INTO `cycles` (`cycle_sequence`,`cycle_timestamp`,`cycle_did`,`cycle_serial`,`cycle_03_INT`,`cycle_14_INT`,`cycle_15_INT`,`cycle_18_INT`)";
  $sql = $sql . "VALUES ($SeqNum,$UnixTime,'$siteDID','$MachSerial',$machine_press,$machine_cycles_total,$machine_cycles_return,$machine_pct_full)";

  // Performs the $sql query on the server to insert the values
  if ($conn->query($sql) === TRUE) {
    // echo 'Entry saved successfully<br>';
  } else {
    echo 'Error: '. $conn->error;
  }

break;

3 个答案:

答案 0 :(得分:0)

需要更多信息来帮助解决您的问题。

  

首先,要显示错误,请编辑Codeigniter中的 index.php 文件   项目,更新它所说的地方

define('ENVIRONMENT', 'production');

define('ENVIRONMENT', 'development');

然后你会看到问题究竟是什么。这样您就可以提供帮助您所需的信息。

答案 1 :(得分:0)

我刚看到你在没有将它们包裹在撇号中时插入字符串'。所以你的查询应该是:

$sql = "UPDATE `machines` SET `machine_last_run`='".$UnixTime."',`machine_press`='".$machine_press."',`machine_pct_full`='".$machine_pct_full."',`machine_cycles_return`='".$machine_cycles_return."',`machine_cycles_total`='".$machine_cycles_total."' WHERE `machine_serial`='$MachSerial'";

$sql = "INSERT INTO `cycles` (`cycle_sequence`,`cycle_timestamp`,`cycle_did`,`cycle_serial`,`cycle_03_INT`,`cycle_14_INT`,`cycle_15_INT`,`cycle_18_INT`)";
$sql = $sql . " VALUES ('$SeqNum','$UnixTime','$siteDID','$MachSerial','$machine_press','$machine_cycles_total','$machine_cycles_return','$machine_pct_full')";

对于任何类型的未知问题,我可以建议启用PHP和SQL错误,并使用我用来测试我的apis的名为postman的工具。您可以使用任何方法,标题和参数模仿请求,并发送“短信”,就像您的提供商或您的API一样。然后,您可以看到应用程序抛出的错误。

修改

我使用带有'和db。

的固定版本测试了您的脚本
$Message = "value1:value2:value3";
$MachSerial = "someSerial";
$SeqNum = "someSeqNo";
$siteDID = "someDID";

$pdo = new PDO('mysql:host=someHost;dbname=someDb', 'someUser', 'somePass');

// Gather Variables
$Message = preg_replace("/\s+/","%20", $Message);

$UnixTime = time();
$cycle = explode(":", $Message);
$machine_press = $cycle[0];
$machine_pct_full = (int)$machine_press/20; // <----- Note the casting to int. Else a warning is thrown.
$machine_cycles_return = $cycle[1];
$machine_cycles_total = $cycle[2];

// Build SQL Statement to update static values in the machine table
$sql = "UPDATE `machines` SET `machine_last_run`='$UnixTime',`machine_press`='$machine_press',`machine_pct_full`='$machine_pct_full',`machine_cycles_return`='$machine_cycles_return',`machine_cycles_total`='$machine_cycles_total' WHERE `machine_serial`='$MachSerial'";

try {
    $pdo->query($sql);
} catch (PDOException $e) {
    echo 'Query failed: ' . $e->getMessage();
}

$sql = "INSERT INTO `cycles` (`cycle_sequence`,`cycle_timestamp`,`cycle_did`,`cycle_serial`,`cycle_03_INT`,`cycle_14_INT`,`cycle_15_INT`,`cycle_18_INT`)";
$sql = $sql . "VALUES ('$SeqNum','$UnixTime','$siteDID','$MachSerial','$machine_press','$machine_cycles_total','$machine_cycles_return','$machine_pct_full')";

try {
    $pdo->query($sql);
} catch (PDOException $e) {
    echo 'Query failed: ' . $e->getMessage();
}

完全有效。插入每个循环并更新机器。在我通过添加包装来修复它之前,我有很多错误。

答案 2 :(得分:0)

好的,这就是解决方案:

我换了一行:

$Message = preg_replace("/\s+/","%20", $Message);

使用:

$Message = preg_replace("/\s+/","", $Message);

这将删除文本消息中的所有空格,并在断开之前将其作为单个字符串并将其分配给数据库中的不同表。 我知道这不是剧本的问题,周围没有人会在回答之前知道实际问题。这就是为什么我发布解决方案只是为了更新这里涉及的团队。