我寻找答案,但找不到,因为这里的问题似乎略有不同。
$vid = $_SESSION['ID_Vendor'];
echo "ID: $vid";
$q = 'SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor=res.ID_Vendor AND res.ID_Vendor="$vid" ORDER BY business_name ASC';
变量 $vid 确实有一个值(在这种情况下等于 2,但它可能会有所不同),但是,当我专门设置
WHERE res.ID_Vendor=2
我的查询返回正确且预期的值列表,但是当我使用
WHERE res.ID_Vendor="$vid"
有了"$vid",我的价值观的回声简直是空的。
下面是完整的代码片段,用于回显输出。感谢您的帮助。
$vid = $_SESSION['ID_Vendor'];
echo "ID: $vid";
$q = 'SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor=sfe.ID_Vendor AND res.ID_Vendor="$vid" ORDER BY business_name ASC';
$r = mysqli_query($connection, $q);
while ($row = mysqli_fetch_array ($r, MYSQLI_NUM)) {
echo '>' . htmlspecialchars($row[0]) . ' ' . htmlspecialchars($row[1]) . ' ' . htmlspecialchars($row[2]) .'</option>';
}
PHP 无法识别撇号对 '' 中的变量。将变量放在 " 中。例如:
"WHERE res.ID_Vendor='$vid'"
既然我提出了这个想法,我想我应该说明预准备语句的使用。
使用mysqli
将按如下方式进行(假设已成功初始化$connection
):
// The indentation here is purely a matter of personal preference
$query = 'SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor = res.ID_Vendor
WHERE res.ID_Vendor = ?
ORDER BY business_name ASC';
$stmt = $connection->prepare($query);
$stmt->bind_param('s', $vid); // 's' assumes $vid is string; use 'i' for int
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_array(MYSQLI_NUM))
{
echo '>' . htmlspecialchars($row[0]) . ' ' . htmlspecialchars($row[1]) . ' ' . htmlspecialchars($row[2]) .'</option>';
}
成语与使用PDO
相同。PDO数据源名称(DSN)的格式是在线记录的。
$conn = new PDO($dsn, $username, $password); // define these vars elsewhere
$query = 'SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor = res.ID_Vendor
WHERE res.ID_Vendor = :vid
ORDER BY business_name ASC';
$stmt = $conn->prepare($query);
$stmt->execute(array(':vid' => $vid));
while ($row = $stmt->fetch(PDO::FETCH_NUM))
{
echo '>' . htmlspecialchars($row[0]) . ' ' . htmlspecialchars($row[1]) . ' ' . htmlspecialchars($row[2]) .'</option>';
}
在这两种情况下,我都将错误处理留给读者练习。
你的代码有几个问题:
首先,这是行不通的,并且会从字面上呼应$vid
。
echo "ID: $vid";
这将返回:ID: $vid
您需要将字符串与变量连接起来,它应该是:
echo "ID: " . $vid;
这将返回:ID: 2
其次,您的查询将不起作用:
$q = 'SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor=res.ID_Vendor AND res.ID_Vendor="$vid" ORDER BY business_name ASC';
您应该用双引号将查询括起来,用单引号将变量括起来:
$q = "SELECT business_name, vd.ID_Vendor, res.ID_RestaurantEstablishment
FROM restaurant res
INNER JOIN vendor_data vd
ON vd.ID_Vendor=res.ID_Vendor AND res.ID_Vendor='$vid' ORDER BY business_name ASC";
对于SQL,不像javascript或php,字符串或char只允许使用单引号。
对于 MySQL,如果res.id_vendor的列类型是数字,则 res.id_vendor='1' 与 res.id_vendor=1 相同,因此最好始终用单引号将变量括起来,如 res.id_vendor='$vid
最后,关于编码约定的评论:建议列命名中不要混合使用大写和小写字符,使用"_"作为单词分隔符,例如
vd.id_vendor
res.id_restaurant_establishment