【发布时间】:2020-12-10 01:32:07
【问题描述】:
我有一个关于 Customer 信息的 SQL Server 数据库,CustomerPhone 有一个多值列,即 C_Phone。
这是我的代码:
if (!empty($_GET['customer_id'])){
// 'id' input from the user
$id = $_GET['customer_id'];
// Customer Information
$sql = "SELECT Customer.C_Code, C_FirstName, C_LastName, C_Email, C_HomeAddress, C_OfficeAddress, C_Phone
FROM Customer, CustomerPhone
WHERE Customer.C_code = CustomerPhone.C_code and Customer.C_code = $id;";
$query = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch_array($query);
if (!empty($row)) {
echo "
<div class=\"card\" style=\"width: 25rem; margin-left: auto; margin-right: auto;\">
<div class=\"card-body\">
<h5 class=\"card-title\">Customer Information</h5>";
echo "<p class=\"card-text\">C_code: " . $row['C_Code'] . "</p>";
echo "<p class=\"card-text\">C_Name: " . $row['C_FirstName'] . " " . $row['C_LastName'] . "</p>";
echo "<p class=\"card-text\">C_Email: " . $row['C_Email'] . "</p>";
echo "<p class=\"card-text\">C_HomeAddress: " . $row['C_HomeAddress'] . "</p>";
echo "<p class=\"card-text\">C_OfficeAddress: " . $row['C_OfficeAddress'] . "</p>";
echo "<p class=\"card-text\">C_Phone: ";
while($row = sqlsrv_fetch_array($query))
{
echo $row['C_Phone'] . "<br>";
}
echo "</p>";
echo "
</div>
</div>";
}
这是我得到的结果。如何在第一个电话号码下打印第二个电话号码?
如果我在 SSMS 上运行上面的 SQL 查询,我会得到 Customer.C_Code = 7 的结果:
【问题讨论】:
-
主要问题 - 您的代码容易受到 sql 注入的影响。每当需要将变量放入查询中时,请使用准备好的语句。 小事 - “多值列”不正确。你所拥有的是一对多的关系。两者之间有很大的不同;前者是一场噩梦,后者是正确的。幸运的是,看起来您的表格是正确的。如果您使用
while ($row=sqlsrv_fetch_array)而不是if,您将得到两行。要获得您想要的结果,您必须在 sql 中使用嵌套查询或使用聚合函数。 -
@TimMorton 感谢您指出我的代码中的 SQL 注入问题,我之前没有注意到。
标签: php sql-server sqlsrv