1

githubにあるmysqlidbクラスを使用しています

私のクエリは次のようになります

$db->query('
  SELECT
    memberID,zoneCode,state,zone,countyName,
    CONCAT(state,\'Z\',zone) as fullZoneCode
  FROM members_zonesToWatch
  LEFT JOIN (
    SELECT state,zone,countyName
    FROM countyPublicForcastZoneCorrelation
  ) as zones
    ON zoneCode = CONCAT(state,\'Z\',zone)');

私が得る問題は

Fatal error: Problem preparing query 
(SELECT
  memberID,zoneCode,state,zone,countyName,
   CONCAT(state,'Z',zone) as fullZoneCode
 FROM members_zonesToWatch
 LEFT JOIN (
   SELECT state,zone,countyName
   FROM countyPublicForcastZoneCorrelation
 ) as zones
   ON zoneCode = CONCAT(state,'Z',zone)) 
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
''Z',zone) as fullZoneCode FROM members_zonesToWatch LEFT' at line 1

このクエリはそのままでmysqlワークベンチで問題なく機能します。mysqliクラスを使用することの何が問題になっていますか?

4

2 に答える 2

2

それはすべきではありません

SELECT
m.memberID, m.zoneCode, m.state, m.zone, m.countyName,
CONCAT(m.state,'Z',m.zone) as fullZoneCode,
c.state, c.zone, c.countyName
FROM members_zonesToWatch m
LEFT JOIN countyPublicForcastZoneCorrelation c
ON c.zoneCode = CONCAT(m.state, 'Z', m.zone) 
于 2012-07-07T05:05:45.920 に答える
2

あなたのケースでテストした後、問題'Z'$db->query

これは、ステートメントがステートメントのときにMysqliDB内部的に例外を使用mysqliしてmysqliスローするためですprepare(デバッガーからは、引用符'がに変わるようです')。

代わりに、あなたのようなケースをMysqliDB用意してください。rawQueryしたがって、以下を使用してください:

$result = $db->rawQuery('
    SELECT m.memberID, CONCAT(m.state, ? ,m.zone) as fullZoneCode
    FROM members_zonesToWatch m
    LEFT JOIN countyPublicForcastZoneCorrelation c
    ON c.zoneCode = CONCAT(m.state, ? ,m.zone)',
    array('Z','Z'));

参照:PHP-MySQLi-データベース-クラス/ MysqliDb.php ;

于 2012-07-14T02:00:02.177 に答える