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';
...
}