我有以下SQL查询,它按DocNumber
返回发票:
"SELECT * FROM Invoice WHERE DocNumber = '" . $id . "'"
此处,$id
包含类似以下示例的字符串:
M10045
M10046
M10046
此查询失败,除非我将$id
分隔为'M'
和'10045'
并在查询中将它们连接起来,如下所示:
preg_match('/\d+/', $id, $id_number, PREG_OFFSET_CAPTURE);
preg_match('/[A-Z]+/', $id, $id_letter, PREG_OFFSET_CAPTURE);
"SELECT * FROM Invoice WHERE DocNumber = '" . $id_letter[0][0] . $id_number[0][0] . "'"
什么可能导致这类问题?
注意,在查询中使用$id
会返回一个空数组,因为找不到匹配项。拆分$id
的字母和数字部分将返回发票对象。
答案 0 :(得分:2)
请尝试
$id = trim($id);
或
$id = preg_replace('/[^\w]/', '', $id);
$query = "SELECT * FROM Invoice WHERE DocNumber = '$id'";
删除所有不是AlphaNum破折号或下划线的字符。