PHP MYSQL 查询WHERE语句 - Returns 也是不满足条件的行

PHP MYSQL query WHERE statement - Returns also rows where the condition is not met

我正在尝试使用以下语句查询 mysql 数据库:

SELECT form_data.*, forms.orderId, forms.eType 
FROM form_data 
LEFT JOIN forms ON form_data.fieldId = forms.id 
WHERE form_data.submitId='somehashedid' 
ORDER BY forms.orderId ASC

如果我在 phpmyadmin 中使用此语句,输出 returns 只有包含提交的 submitId 的行。这正是我想要的。

但是尝试在 php returns 中使用相同的查询也包含不包含正确 submitId

的行
function getReportDetails($reportId) {
        $stmt = $this->prepare("SELECT form_data.*, forms.orderId, forms.eType FROM form_data LEFT JOIN forms ON form_data.fieldId = forms.id WHERE form_data.submitId=? ORDER BY forms.orderId ASC");
        $stmt->bind_param("i", $reportId);
        $stmt->execute();

        return $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    }

// $_REQUEST['id'] is checked not to by empty
$data = $dao->getReportDetails($_REQUEST['id']);

// $data is checked to have an array of results

submitId 是一个 varchar(35) utf8_general_ci

submitIds 看起来像这样 f89cf0bc3660424b017f9bfe0d8c0252

我现在的解决方法是,如果 db id 与请求的 id 匹配,则再次检查我的循环,并限制仅输出预期信息。但为什么我会得到错误的结果?

如果您对我的代码还有其他改进,请告诉我。

感谢您的帮助!

因为 submitId 是一个 varchar,对于 bind_param 方法,您应该使用字符 's' 而不是 'i'(字符 's' 用于绑定字符串数据类型或 varchar,而'i' 用于整数) 所以试试下面的东西..

 $stmt->bind_param("s", $reportId);