Как проанализировать идентификатор через URL с помощью внутреннего соединения

#php #mysql

#php #mysql

Вопрос:

У меня есть код, который хорошо работает, если я указываю в своем запросе нужный идентификатор. Однако при попытке проанализировать его через URL он не работает.

 if(!$rs = mysql_query("SELECT id_player, fight, sh, pl, st, ch, ma, hi, sk, en, pe, fa, le, str, team, contract_lenght, main_position, alternate_position, salary, player_name, TRUNCATE(((sh   pl   st)/3),0) AS OFF, TRUNCATE(((ch   ma   hi)/3),0) as DEF, TRUNCATE(((sh   pl   st   ch   ma   hi   sk   en   pe   fa   le   str   pot   con   greed)/15),0) as OV, main_position.id, main_position.type_main_position, alternate_position.id, alternate_position.type_alternate_position, nom_equipe_nhl.team_id, nom_equipe_nhl.team_name, nom_equipe_nhl.team_abr FROM players_nhl INNER JOIN nom_equipe_nhl ON nom_equipe_nhl.team_id = players_nhl.team INNER JOIN main_position ON players_nhl.main_position = main_position.id INNER JOIN alternate_position ON players_nhl.alternate_position = alternate_position.id WHERE id_player='$id_player'")) {
  

Я также получил это в верхней части своей страницы..

 <?php
$id_player = mysql_real_escape_string($_GET['id_player']);
?>
  

Если я заменю $id_player на число, это сработает, но если я проанализирую свой URL с помощью ?id_player=25 .. Я всегда получал результат not found.

Я много чего перепробовал, но, похоже, это не работает. Однако, если я заменю все внутреннее соединение и все после «как OV» и от игроков… это работает. Ie;

 if(!$rs = mysql_query("SELECT id_player, fight, sh, pl, st, ch, ma, hi, sk, en, pe, fa, le, str, team, contract_lenght, main_position, alternate_position, salary, player_name, TRUNCATE(((sh   pl   st)/3),0) AS OFF, TRUNCATE(((ch   ma   hi)/3),0) as DEF, TRUNCATE(((sh   pl   st   ch   ma   hi   sk   en   pe   fa   le   str   pot   con   greed)/15),0) as OV FROM players_nhl WHERE id_player='$id_player'")) {
  

Мне действительно нужно, чтобы идентификатор анализировался через URL с внутренним соединением.

Спасибо

Комментарии:

1. Вы уверены в mysql_* функциях? Они были удалены из PHP. Вам обязательно следует переключиться на mysqli или PDO.

2. Весь мой код старый, в будущем я, вероятно, перешел бы на mysqli или pdo, но я бы действительно хотел, чтобы эта работа была такой, как сейчас, если это возможно.

3. Если он останавливается на 25, вы уверены, что у вас ID = 25?

4. Также contract_lenght похоже на опечатку.

5. тэдман, да, я получил более 3000 строк, и это сработает, если я добавлю 25 непосредственно в свой запрос. Что касается contract_length, я согласен, что это может выглядеть как опечатка, но эта ошибка была допущена человеком, который создал таблицу и неправильно ее написал 😉

Ответ №1:

 mysql_real_escape_string()
  

Это расширение устарело в PHP 5.5.0, и оно было удалено в PHP 7.0.0
вы должны использовать mysqli или pdo.

Это правильный синтаксис:

 $id_player = mysqli_real_escape_string($your_connection_object, $_GET['id_player']);
  

или в нотации ООП:

 $your_connection_object->real_escape_string();
  

То же самое, что описано для mysql_query() …

 mysql_query("SELECT id_player,...
  

становится

 mysqli_query($your_connection_object, $your_query);
  

или в ООП:

 $your_connection_object->query($your_query);
  

Комментарии:

1. Форма ООП — единственная, которую действительно стоит учить. Он гораздо менее подробный, и его практически невозможно использовать mysql_query случайно, например, забыть i при вызове функции.