【发布时间】:2016-06-24 19:18:06
【问题描述】:
我在寻找答案,但找不到答案,因为这里的问题似乎略有不同。
$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”,我的价值观的回声只是空的。
下面是完整的 sn-p 代码,也用于回显输出。 感谢您的帮助。
$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>';
}
【问题讨论】:
-
这有什么不同吗?
$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"; -
在执行之前回显您的查询,我认为问题会很明显。如果你阅读准备好的语句,你可以完全避免这个问题。
-
达尔文,谢谢。但是,为什么准备好的声明会有所作为?我认为存储过程会起作用,不是吗?让我两个都试试。
-
除其他外,准备好的语句会自动为您处理查询参数的引用和类型匹配。
-
一个简单的
echo $q;就会发现其中一个问题。观察到的行为并不“奇怪”。它定义明确且有据可查。