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);
我正在尝试使用以下语句查询 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);