私はこのSQLクエリを持っています:
SET @date_shift = DATE_SUB(NOW(), Interval 60 MINUTE);
SELECT hinfo.idx,
hinfo.host_idx,
hinfo.processor_load,
hinfo.memory_total,
hinfo.memory_free,
hnames.idx,
hnames.name,
disks.hostinfo_idx,
disks.id,
disks.name,
disks.size,
disks.freespace,
hinfo.probetime
FROM systeminfo.hostinfo AS hinfo
INNER JOIN systeminfo.hosts AS hnames
ON hnames.idx = hinfo.host_idx
INNER JOIN systeminfo.disksinfo AS disks
ON disks.hostinfo_idx = hinfo.idx
WHERE hinfo.probetime > @date_shift AND
hinfo.probetime = (SELECT MAX(probetime) FROM systeminfo.hostinfo AS hi
WHERE hi.probetime > @date_shift AND hi.host_idx = hinfo.host_idx)
GROUP BY disks.id,
hnames.name
ORDER BY hnames.name,
disks.id;
私はそれをphpコードで実行しようとしています。mysql、mysqli、pdo を試しました。Ma 最後のコードは次のとおりです。
$db = new PDO("mysql:host=".$this->ip.";dbname=".$this->dbname.";charset=utf8", $this->username, $this->password);
$result = $db->query($query);
$fetch_data = $result->fetchAll(PDO::FETCH_ASSOC);
また
mysql_connect($this->ip, $this->username, $this->password);
mysql_query('SET NAMES utf8;');
mysql_select_db($this->dbname);
$result = mysql_query($query);
PHP はデータベースに正しく接続します。select * from tablename のような単純なクエリが機能します。しかし、このクエリではデータは返されませんが、エラーが返されます。
1064 : SQL 構文にエラーがあります。2 行目の 'SELECT hinfo.idx, hinfo.host_idx, hinfo.processor_load, hinfo.memory_total,' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
データベース クライアントで実行された同じクエリは完全に機能します (これは低速なクエリではなく、実行に 10 ミリ秒もかかりません)。さらに、この関数からクエリを直接 Web ページに出力して mysql クライアントに貼り付けようとすると、完全に機能します。16進ビューアで特殊文字が見つかりません。utfエンコーディングを強制しようとしましたが、何もありませんでした。
何か案は?私が実行できるテスト?前もって感謝します!