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

3

我目前有一个在mySQL Workbench 5.2中工作的mySQL查询,但不幸的是,当我将其翻译到我的php文件中时,CONCAT函数只能获取FirstName,而无法获取LastName。如果我不使用单引号来构建名字之间的空格,则可以检索到全名,但是当我添加用于间隔的代码时,它只会检索到名字的第一部分。

例如,如果我不在名称之间添加间距并使用以下修改后的代码调用EmployeeName,则可以正常工作:

    SELECT * , concat(FirstName,LastName) as 'EmployeeName'

但是输出的结果将会是BruceWayne

下面的代码是使用CONCAT函数调用EmployeeName时无法检索到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”。有人有任何建议吗?

等待所有评论,即使它们完全无用,也要使用MySQLi和PDO代替MySQL。 - SSH This
为什么你要在双引号中加入单引号而关闭双引号呢?:: FirstName," . "' '" . -works-> FirstName, ' ', - UnholyRanger
1个回答

3

您在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。在即将发布的PHP 5.5中,mysql_*() API将被弃用。
"WHERE e.name = '$q'";

我最初尝试了那个,但没成功,所以才试着进行拼接。:( - rawrPowershell
@rawrPowershell 这是一个HTML转义和值引用的问题...请参见上面的更改。 - Michael Berkowski
这太完美了,我尝试使用代码中的htmlentities部分,它完美地工作了。我感谢所有的帮助和提示!谢谢! - rawrPowershell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接