2016-01-20 45 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); 
    } 
}