Ситуация с оператором связывания PHP MySQL

Я должен создать веб-сервис в своем приложении для извлечения данных из базы данных MySQL с помощью PHP. Я не знаю, сработает ли то, что я хочу, или нет, так как я новичок в PHP. Вот код:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?)";
$stmt = mysqli_prepare($this->connection, $queryString);
mysqli_stmt_bind_param($stmt, 'ss', $itemst, $itempt);
mysqli_stmt_execute($stmt);

Мой вопрос связан с оператором привязки для столбца propType моей базы данных. В моем приложении есть около 8 различных типов свойств, которые пользователь может установить флажок для поиска. Я хотел бы соединить строки в одно значение, представленное выше как $ itempt, и просто связать эту единственную строку с оператором SQL, но я не знаю, смогу ли я это сделать ???

Если я не могу, я должен сделать что-то вроде следующего:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?,?,?,?,?,?,?,?)";

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

Итак, мой вопрос, с предложением «IN», могу ли я сшить все строковые значения в одну строку через запятую, а затем просто привязать это единственное значение к моему запросу, или мне нужно передать отдельную переменную для каждого возможные значения и привязать к ним индивидуально?

Спасибо за понимание!

0

Решение

Я отредактировал свой ответ, так как он не работал, и переписал фрагмент в стиле PDO и протестировал его (просто с другой схемой таблицы).

Вот:

$servername = "localhost";
$username = "user";
$password = "pass";
$db = "stackoverflow";

try{
$con = new PDO("mysql:host=$servername;dbname=$db", $username, $password);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // set this if you want to bind LIMIT values

}catch(PDOException $e){
$error =  "Connection failed: " . $e->getMessage();
}

$itemst = ['active']; // cast search parameters as array so you can merge them
// watch the order in which you bind them! Else you will never find matching entries
$container = ['some title 1','some title 3','some title 5'];
$limit = [0,2];
$params = array_values(array_merge($itemst,$container,$limit));
$bindStr = implode(",", array_map(function($val) { return "?"; }, $container));
$queryString = "SELECT course_title FROM mysqli_quick WHERE state = ? AND course_title IN ({$bindStr}) LIMIT ?,?";

$stmt = $con->prepare($queryString);

$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);

Печать

array (size=3)
0 =>
array (size=1)
'course_title' => string 'some title 1' (length=12)
1 =>
array (size=1)
'course_title' => string 'some title 3' (length=12)
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector