MySQL命令不能通过PHP脚本执行

问题描述:

我有两个非常相似的脚本(location.php和event.php)。MySQL命令不能通过PHP脚本执行

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

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

我的问题是为什么以及如何修复它,我认为这可能是一个转义字符问题,用于event.php第7行的MySQL> php。

或者是通过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 ?> 

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

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