首页 > 解决方案 > MySQLi 内部连接问题

问题描述

我在一个论坛上有两个表,我通过 SELECT 查询引用它们。一个表是 phpBB_users 表,它保存成员的基本数据,而第二个表 phpbb_profile_fields_data 保存地址、电子邮件、电话等详细信息。两个表都使用 user_id 作为键。我的表单选择了 $smode 参数,它列出了要搜索的各种列标题和 $parameter 变量,它输入要搜索的实际数据。结果显示在 HTML 表格中。

这是我的代码:

$conn = new mysqli('localhost',$user,$pass,$database);

$sql = "SELECT * FROM phpbb_users 
INNER JOIN phpbb_profile_fields_data ON phpbb_users.user_id = phpbb_profile_fields_data.user_id
WHERE   $smode = $parameter
ORDER BY username";
$result = $conn->query($sql);

如果我选择 group_id(在 phpbb_users 表中)作为我的 $smode 变量并输入给定的组号作为 $parameter 变量,我会得到该组中成员的一个很好的列表。如果我将 $smode 变量更改为 pf_user_lastname (位于 phpbb_profile_fields_data 表中)并输入一个常见的姓氏,我不会得到任何结果。如果我使用用户名作为 $smode 变量(位于 phpbb_users 表中),情况也是如此。我没有得到任何结果。group_id 列是一个整数,而其他两个是字母数字变量,但是当我将 $smode 更改为 pf_mh_year(phpbb_profile_fields_data 表中的 4 位整数)时,我仍然没有得到任何结果。我在 error_log 中没有收到错误消息,因为 $result->num_rows 为零 - 除了列表显示的第一种情况。

标签: phpselectmysqliinner-join

解决方案


我确实回显了 $sql ,它看起来不错。但是当我按照您的建议在 PHPMyAdmin 中对其进行测试时,它表明我需要将 $parameter 值放在单引号中。不知道为什么它在一个整数列没有它们的情况下工作,但不是另一个,但无论哪种方式,既然引号已经到位,一切都会正常工作。


推荐阅读