mySQL查询不返回PHP中的连接结果

时间:2013-03-01 17:19:33

标签: php mysql

我目前有一个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>
           ";
           }

输出只是名字:布鲁斯。有没有人有什么建议?

1 个答案:

答案 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'";