2014-12-19 17 views
1

我已经返回由DocNumber发票下面的SQL查询:SQL - 查询失败*除非*字符串分解成数和字母,然后再连接

"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

您确定$ id中没有新行/制表符? –

+0

你的数据是什么样的? M和数字之间可能有空格 – Sparky

+0

echo'count($ id);'?的返回值是什么? – Ragnar

回答

2

请尝试

$id = trim($id); 

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

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

+0

我刚刚尝试过'/ \ w + /'这也起作用。 –

+0

真棒,很高兴我的解决方案为你工作=) – ehime

+0

但我认为trim()是最好的解决方案。 –

相关问题