[英]Extract all tables from an SQL query
我想為表添加前綴,並且最近編寫了一個PHP腳本來提取字符串SQL查詢中的所有表。
$sql = 'UPDATE festivals SET desc = "Starts from July"';
preg_match_all('/(from|into|update|table|join) (`?\w+`?)\s/i', $sql, $matches);
它運行良好,但唯一的問題是它提取July
因為它不區分SQL值和實際表名,因此它假定July
也是一個表。
現在我認為解決方案應該是防止提取包含在單引號或雙引號但不知道如何做的內容。
如果你在你的查詢書寫更加嚴格,你會包裝在反引號你所有的數據庫,表和列名`
,他們會非常容易提取-只是拿它們之間的字符串的第一場比賽:只是做所需的反引號而不是可選的。
也就是說,我不完全確定你的正則表達式是如何from July
開始匹配的from July
因為July
並沒有空白......
你的正則表達式更好用這種方式:
"/((?:^select .+?(?:from|into))|^update|^table|join) (`?\w+`?)\s/I"
但我仍然同意nvartolomei。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.