Я просто не могу понять это правильно. Заниматься хобби-проектом в качестве хобби-программиста. Вот заявление MySQL, которое я использую на веб-странице php:
$stmt = $mysqli->prepare("SELECT t1.* FROM laptimes t1
JOIN (
SELECT gamertag, track, vehicle, vehicleclass, platform, controller, setup,
MIN(laptime) AS min_laptime
FROM laptimes
WHERE track LIKE ? AND vehicle LIKE ? AND vehicleclass LIKE ? AND platform
NOT IN ('PS4','XB1') AND controller NOT IN ('Gamepad','Keyboard') AND setup
NOT IN ('Custom')
GROUP BY gamertag, vehicle, vehicleclass
) AS t2 ON t1.gamertag = t2.gamertag AND t1.laptime = t2.min_laptime AND
t1.track = t2.track AND t1.vehicle = t2.vehicle AND t1.vehicleclass =
t2.vehicleclass AND t1.platform = t2.platform AND t1.controller =
t2.controller AND t1.setup = t2.setup
ORDER BY laptime ASC LIMIT ? OFFSET ?");
$stmt->bind_param("sssii", $trackselect, $carselect ,$classelect, $limit, $offset);
$stmt->execute();
Над кодом, с некоторыми жестко закодированными значениями, работает нормально. Он получает лучшее время для каждого игрока, для лидеров. И он исключает результаты со значением платформы «PS4» или «XB1», значениями контроллера «Gamepad» или «Keyboard» и значениями настройки «Custom». Но я хочу заменить жестко закодированные значения в предложении WHERE переменными. Я могу использовать ? для трека, транспортного средства, класса транспортного средства и предела и смещения, используя параметры привязки, нет проблем. Но для платформы, контроллера и установки я не могу использовать переменные, хотя код отлично работает с жестко закодированными значениями.
Три предложения NOT IN исключают записи со значениями тезисов. В этом примере platform NOT IN ('PS4',XB1')
исключает результаты со значениями ПК или PS4 в столбце «платформа». Вместо жестко закодированных значений я хочу использовать $ platform, $ controller, $ setup. Я перепробовал все комбинации фигурных скобок, скобок, обратного тика, апострофов, двойных кавычек; кажется, ничего не работает.
Если я печатаю значения, например, на $ platform, он показывает: 'PS4','XB1'
(просто пример, значение устанавливается флажками. Таким образом, оно выглядит равным моим жестко закодированным значениям.
Если заменить жестко закодированные значения на? (соответственно корректируя bind_param), из результата ничего не исключается, даже если я поставлю галочки (я печатаю значение $ platform, $ controller, $ setup и это выглядит правильно).
Если я вместо этого сделаю это так: platform NOT IN ($platform)
, тогда это сработает. Но если я сделаю то же самое с контроллером и настройкой, controller NOT IN ($controller) AND setup NOT IN ($setup)
я получу это сообщение об ошибке:
Fatal error: Call to a member function bind_param() on a non-object
указывает на строку с bind_param. Я настроил строку bind_param, чтобы исправить количество переменных "sss" и $.
Так, как я могу использовать переменные вместо жестко закодированных значений?
Я вышел из своей лиги здесь, я не могу этого понять. Напечатанные значения переменных в точности соответствуют жестко закодированным примерам Нужен ли особый вид скобок или какой-то волшебный соус? Я не знаю.
Надеюсь, я объяснил проблему достаточно хорошо. Если нет, дайте мне знать, и я попробую еще раз.