-1

ショッピング カート内の見積もり値のヒストグラムを取得しようとしています。このクエリは、mySQL に直接貼り付けると機能しますが、PHP 側に問題があります。

エラーメッセージ:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in .../.../... Line 26.

私のコード:

echo '<h2>Histogram of Quotes</h2>';

$sql = 'SELECT 
            ROUND(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2), -3)    AS bucket,
            COUNT(*) AS Count,
            RPAD('', LN(COUNT(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2))), "*") AS bar
        FROM   
            Quotes,
            Products,
            Fixes,
            Currencies,
            Metals,
            ProductTypes
        WHERE
            Quotes.ProductId = Products.Id AND
            Products.MetalId = Metals.Id AND
            Products.ProductTypeId = ProductTypes.Id AND
            Fixes.CurrencyId = Currencies.Id AND
            Fixes.MetalId = Metals.Id AND
            Currencies.Code = "GBP"                     
        GROUP BY bucket';

$stmt = $db->prepare($sql); 
$stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);  

26行目は次の行ですGROUP BY bucket';

SQL コードが機能することの証明

bucket  COUNT   bar
0       114     *****
1000    37      ****
2000    8       **
3000    2       *
4000    3       *
5000    4       *
8000    1   
9000    1   
10000   1   
21000   1   
4

1 に答える 1

3

引用符をエスケープせずに混合しています:

$sql = 'SELECT 
            ROUND(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2), -3)    AS bucket,
            COUNT(*) AS Count,
            RPAD('', LN(COUNT(ROUND(Fixes.FixAM/31.1035 * Products.Fineness * Products.Buy * Quotes.Weight, 2))), "*") AS bar
// Here ---------^^
        FROM   
            Quotes,
            Products,
            Fixes,
            Currencies,
            Metals,
            ProductTypes
        WHERE
            Quotes.ProductId = Products.Id AND
            Products.MetalId = Metals.Id AND
            Products.ProductTypeId = ProductTypes.Id AND
            Fixes.CurrencyId = Currencies.Id AND
            Fixes.MetalId = Metals.Id AND
            Currencies.Code = "GBP"                     
        GROUP BY bucket';

それらを二重引用符に切り替えるか、バックスラッシュを使用してクエリでエスケープします。

于 2013-01-09T16:34:50.277 に答える