我目前有一个mySQL查询可以在mySQL workbench 5.2中运行,但不幸的是,当我将它翻译成我的php文件时,CONCAT函数只能抓取FirstName,但不能抓取LastName。如果我不使用单引号在名字和姓氏之间建立空格,我可以检索全名,但是当我添加间距的代码时,它只检索名字。
例如,如果我不添加名称之间的间距,并使用其修改的代码部分调用EmployeeName:
SELECT * , concat(FirstName,LastName) as 'EmployeeName'
但输出将是BruceWayne
以下代码是我调用EmployeeName
时CONCAT无法检索LastName的地方 $sql = "
SELECT * , concat(FirstName," . "' '" . ",LastName) as 'EmployeeName'
FROM tblEquipment e
INNER JOIN tblEmployee em on em.employee_id = a.employee_id
INNER JOIN tblStatus s on s.Status_id = e.equipment_id
WHERE e.name = " . "'" . $q . "'" . ";
";
while($row = mysql_fetch_array($result))
{
echo "
<td>
Equipment ID:
</td>
<td>
<input type='text' size='25' disabled value = " . $row['Equipment_ID'] . ">
</td>
<td style='padding-left:10px;'>
Currently Assigned To:
</td>
<td>
<input type='text' size='25' disabled value = " . $row['EmployeeName'] . ">
</td>
";
}
输出只是名字:布鲁斯。有没有人有什么建议?
答案 0 :(得分:3)
HTML引号中的value=
属性未引用,因此只接受第一个空格中的一个单词。您应该转义并引用值属性。每当您将变量打印到HTML标记中时,您需要通过htmlspecialchars()
转义它们。
将变量打印到HTML标记属性时,我建议使用带有ENT_QUOTES
选项的htmlentities()
来转义属性中的单引号和双引号。
echo "
<td>
Equipment ID:
</td>
<td>
<input type='text' size='25' disabled value='" . htmlentities($row['Equipment_ID'], ENT_QUOTES) . "'>
</td>
<td style='padding-left:10px;'>
Currently Assigned To:
</td>
<td>
<input type='text' size='25' disabled value='" . htmlentities($row['EmployeeName'], ENT_QUOTES) . "'>
</td>
";
}
请注意,您无需在CONCAT()
:
" SELECT * , concat(FirstName, ' ',LastName) as 'EmployeeName
同样在WHERE
中,$q
可以直接插入双引号字符串中。我们假设它已通过mysql_real_escape_string()
正确转义。从长远来看,请考虑切换到支持预准备语句的API。 mysql_*()
API在即将到来的PHP 5.5中面临弃用。
"WHERE e.name = '$q'";