【问题标题】:MySQL command not executing through PHP scriptMySQL 命令未通过 PHP 脚本执行
【发布时间】:2017-02-04 14:04:04
【问题描述】:

我有 2 个非常相似的脚本(location.php 和 event.php)。

location.php 执行完美,但 event.php 没有。

当我直接从数据库运行 event.php 中的 SQL 时,它可以正常工作。

我的问题是为什么以及如何解决它,我认为这可能是 MySQL >php 的 event.php 第 7 行的转义字符问题。

另外,通过 php 界面使用用户变量是否存在问题?

我已经包含了“projectDatabase.php”,以防我错过了一些连接设置问题,但使用此连接的其他脚本运行良好。

location.php:

1  <?php
2     require_once 'projectDatabase.php';
3
4     $dbinstance = new projectDatabase();
5
6     $query = "UPDATE items SET latitude = ((RAND() * (51.3805 - 51.3770)) + 51.3770), longitude = ((RAND() * (-2.3320 - -2.3240)) + -2.3240), update_ts = NOW()";
7
8     $dbinstance->db->query($query);
9
10 ?>

event.php:

1  <?php
2     require_once 'projectDatabase.php';
3
4     $dbinstance = new projectDatabase();
5
6     $query = "SELECT @now := NOW();
7     UPDATE catches c JOIN (SELECT item_id, MAX(update_ts) AS ts FROM items GROUP BY item_id) AS i ON c.item_id = i.item_id SET c.spawn_time = i.ts WHERE c.catch_time > @now - INTERVAL 15 MINUTE;
8     UPDATE items SET latitude = ((RAND() * (51.3805 - 51.3770)) + 51.3770), longitude = ((RAND() * (-2.3320 - -2.3240)) + -2.3240), update_ts = @now;";
9
10
11    $dbinstance->db->query($query);
12
13  ?>

projectDatabase.php:

1  <?php
2  class projectDatabase {
3      private $dbHost     = 'localhost';
4      private $dbUsername = 'XXXXXXXXX';
5      private $dbPassword = 'XXXXXXXXX';
6      private $dbName     = 'XXXXXXXXX';
7     
8     function __construct(){
9       if(!isset($this->db)){
10              $link = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
11              if($link->connect_error){
12                  die("Failed to connect with MySQL: " . $link->connect_error);
13              }else{
14                  $this->db = $link;
15              }
16          }
17    }
18  ?>

【问题讨论】:

    标签: php mysql sql escaping character


    【解决方案1】:

    问题是,projectDatabase 类中没有名为 $db 的实例变量。您需要在projectDatabase 类中创建一个名为$dbpublic 实例变量,如下所示:

    class projectDatabase {
        public $db;
        private $dbHost = 'localhost';
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2015-11-01
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多