SQL - 查询失败*除非*字符串被分解为数字和字母然后连接

时间:2014-12-19 19:54:21

标签: php mysql sql quickbooks-online

我有以下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的字母和数字部分将返回发票对象。

1 个答案:

答案 0 :(得分:2)

请尝试

$id =  trim($id);

$id =  preg_replace('/[^\w]/', '', $id);
$query = "SELECT * FROM Invoice WHERE DocNumber = '$id'";

删除所有不是AlphaNum破折号或下划线的字符。