Mysql WHERE IN строка массива/имя пользователя

код:

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = join(', ',$friendsArray);  
$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')";
echo $query120;

Это вывод:

SELECT picturemedium FROM users WHERE username IN ('zac1987, peter, micellelimmeizheng1152013142')

Он терпит неудачу, потому что имена пользователей не завернуты одинарными кавычками, такими как "zac1987", "peter", "mice...". Как каждое имя пользователя может быть заключено в одинарные кавычки?

Ответ 1

Пусть каждый цикл прокручивается через каждое имя, ускоряя их.

Я порекомендую, что вы используете фактическую функцию ускорения MySQL, а не просто кавычки вокруг, чтобы убедиться, что данные действительно попадают в запрос правильно. (В противном случае, если бы я ввел имя типа It me!, одинарная кавычка испортила бы запрос.) Я собираюсь предположить, что вы используете PDO (что вам нужно!), но если нет, замените ссылки на PDO::quote на mysql_real_escape_string.

foreach($friendsArray as $key => $friend) {
  $friendsArray[$key] = PDO::quote($friend);
}

$friendsArray2 = join(', ', $friendsArray);

Ответ 2

Если вы не хотите использовать PDO или другие сложные решения, используйте функцию implode, и вы все настроены.

$friendsArray  = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = "'" .implode("','", $friendsArray  ) . "'"; 
$query120      = "SELECT picturemedium FROM users WHERE username IN ( $friendsArray2 )";
echo $query120;

Решение: Я просто ввел ваш $friendArray на ',', чтобы он. легко и просто! и он работает.

Выход: SELECT picturemedium FROM users WHERE username IN ('zac1987','peter','micellelimmeizheng1152013142')

Ответ 3

Нашел этот вопрос в Google и, таким образом, выяснил решение. Не уверен, как "правильно" это решение, но оно сработало для меня.

    $friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
    $friendsArray2 = "'" . join(', ',$friendsArray) . "'";  
    $query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)";
    echo $query120;

Ответ 4

Все просто, если у вас есть только цифры. Но если у вас есть строки, вам нужно проверить кавычки и быть осторожными. Если вы не хотите использовать PDO или "mysql_real_escape_string", следующий код в порядке. Я тестировал, это хорошо работает.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = '"' . implode('","', $friendsArray) . '"';
$query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)";
echo $query120;

Ответ 5

Просто нужно было сделать что-то очень похожее. Это очень простой способ сделать это, что я выяснил после большой головной боли.

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = implode("','",$friendsArray); 

это добавит кавычки между каждым элементом массива, но не в самом начале или в самом конце Поэтому: $friendsArray2 = "zac1987 ',' peter ',' micellelimmeizheng1152013142" так что теперь все, что вам не хватает, это одиночная кавычка перед z в zac1987 и в самом конце после 3142 чтобы исправить это, просто заверните $friendsArray2 в одинарные кавычки в инструкции SELECT.

Он был испытан, проверен и прав.

$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')";
echo $query120;

ВЫВОД: SELECT picturemedium FROM users WHERE username IN ('zac1987', 'peter', 'micellelimmeizheng1152013142')