2016-01-20 18 views
0

試圖編寫一個php mysql連接和查詢。它提供了一個錯誤「注意:使用未定義的常量購買 - 假設'購買'」嘗試反引號沒有解決。有人能告訴我需要改正的地方嗎?帶連字符的php代碼字段名稱

<?php 
$host="localhost"; 
$port=3306; 
$socket=""; 
$user="xxxx"; 
$password="xxxx"; 
$dbname="amazon"; 
$con = new mysqli($host, $user, $password, $dbname, $port, $socket) 
or die ('Could not connect to the database server' .  mysqli_connect_error()); 

$query = "SELECT SUM(`quantity-purchased`), DATE(`purchase-date`),Tally_SKU  FROM daily_orders GROUP BY DATE(daily_orders.`purchase-date`),Tally_SKU"; 


if ($stmt = $con->prepare($query)) { 
$stmt->execute(); 
$stmt->bind_result($quantity-purchased, $purchase-date, $Tally_SKU); 
while ($stmt->fetch()) { 
    //printf("%s, %s, %s\n", $quantity-purchased, $purchase-date,  $Tally_SKU); 
} 
$stmt->close(); 
} 
//$con->close(); 


?> 

回答

0

變形名稱中不允許使用連字符。

變量的一些規則:

1)變量只能用字母(A-ZA-Z)或下劃線開始。

2)變量不應該包含連字符。

3)變量不應該包含空格。

4)變量不應包含除下劃線以外的任何特殊字符。

Reference

+0

請您指導我如何到這兒來。改變列名是不可能的。任何其他出路 – Kanted

+0

@Kanted:你應該只改變'$ stmt-> bind_result($ quantity-purchased,$ purchase-date,$ Tally_SKU)行中的變量名稱;'' – AnkiiG

1

最好的解決方法是使用正確的變量名。不需要它們與數據庫的列名相同。

if ($stmt = $con->prepare($query)) { 
    $stmt->execute(); 
    $stmt->bind_result($quantityPurchased, $purchaseDate, $TallySKU); 
    while ($stmt->fetch()) { 
     printf("%s, %s, %s\n", $quantityPurchased, $purchaseDate, $TallySKU); 
    } 
} 

但是,您可以使用變量名連字符,雖然它是不建議,如果你在大括號括起來:

if ($stmt = $con->prepare($query)) { 
    $stmt->execute(); 
    $stmt->bind_result(${'quantity-purchased'}, ${'purchase-date'}, $Tally_SKU); 
    while ($stmt->fetch()) { 
     printf("%s, %s, %s\n", ${'quantity-purchased'}, ${'purchase-date'}, $Tally_SKU); 
    } 
}