我目前有一个mySQL查询工作在mySQL工作台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>
";
}
输出只有名字:Bruce。有人有什么建议吗?
您的HTML标记中的value=
属性没有引号,因此将只接受第一个空格之后的一个单词。您应该转义并引用值属性。无论何时将变量打印到HTML标记中,都需要通过htmlspecialchars()
转义它们。
当将变量打印到HTML标签属性中时,我建议使用htmlentities()
和ENT_QUOTES
选项来转义属性内的单引号和双引号。
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'";