0

私はこの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エンコーディングを強制しようとしましたが、何もありませんでした。

何か案は?私が実行できるテスト?前もって感謝します!

4

2 に答える 2

2

これを 2 つの別個のステートメントとして実行してみてください。GUI ツールまたはコマンド ライン ツールからクエリを実行することは、コードにクエリを埋め込むこととは異なります。したがって、データベースツールでは機能しますが、php コードでは機能しません。

于 2013-04-19T16:41:04.273 に答える