2017-02-04 4 views
0

У меня есть 2 сценария, которые очень похожи (location.php и event.php).Команда MySQL не выполняется через PHP-скрипт

location.php выполняет отлично, однако event.php этого не делает.

SQL in event.php отлично работает, когда я запускаю его непосредственно из базы данных.

Мой вопрос в том, почему и как я могу это исправить, я думал, что это может быть проблема escape-символа для MySQL> php для строки 7 event.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 ?> 

ответ

0

Проблема заключается в том, что нет переменной экземпляра с именем $db в projectDatabase классе , Вам нужно создать переменную экземпляра с именем public$db в projectDatabase класса, как это:

class projectDatabase { 
    public $db; 
    private $dbHost = 'localhost'; 
    ... 
} 
Смежные вопросы