Use regexp instead of like in goto query

This commit is contained in:
andryyy 2017-03-05 12:24:28 +01:00
parent dff2a726f9
commit 67bb037b36

View File

@ -1470,7 +1470,7 @@ function user_get_alias_details($username) {
WHERE `goto` LIKE :username_goto WHERE `goto` LIKE :username_goto
AND `address` NOT LIKE '@%' AND `address` NOT LIKE '@%'
AND `address` != :username_address"); AND `address` != :username_address");
$stmt->execute(array(':username_goto' => '%' . $username . '%', ':username_address' => $username)); $stmt->execute(array(':username_goto' => '(^|,)'.$username.'($|,)', ':username_address' => $username));
$run = $stmt->fetchAll(PDO::FETCH_ASSOC); $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
while ($row = array_shift($run)) { while ($row = array_shift($run)) {
$data['aliases'] = $row['aliases']; $data['aliases'] = $row['aliases'];
@ -4719,8 +4719,8 @@ function mailbox_delete_mailbox($postarray) {
':username' => $username ':username' => $username
)); ));
$stmt = $pdo->prepare("SELECT `address`, `goto` FROM `alias` $stmt = $pdo->prepare("SELECT `address`, `goto` FROM `alias`
WHERE `goto` LIKE :username"); WHERE `goto` REGEXP :username");
$stmt->execute(array(':username' => '%'.$username.'%')); $stmt->execute(array(':username' => '(^|,)'.$username.'($|,)'));
$GotoData = $stmt->fetchAll(PDO::FETCH_ASSOC); $GotoData = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($GotoData as $gotos) { foreach ($GotoData as $gotos) {
$goto_exploded = explode(',', $gotos['goto']); $goto_exploded = explode(',', $gotos['goto']);
@ -4879,7 +4879,7 @@ function mailbox_get_sender_acl_handles($mailbox) {
try { try {
// Fixed addresses // Fixed addresses
$stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE `goto` LIKE :goto AND `address` NOT LIKE '@%'"); $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE `goto` LIKE :goto AND `address` NOT LIKE '@%'");
$stmt->execute(array(':goto' => '%' . $mailbox . '%')); $stmt->execute(array(':goto' => '(^|,)'.$mailbox.'($|,)'));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while ($row = array_shift($rows)) { while ($row = array_shift($rows)) {
$data['fixed_sender_aliases'][] = $row['address']; $data['fixed_sender_aliases'][] = $row['address'];