Включая переменную $ в MySQL

0

Вот мои неудачные попытки включить PHP-переменную в выражение MySQL. Замена переменной на 1 приводит к печати результатов. Любая помощь будет оценена.

 $query = "
 SELECT name FROM teams
 WHERE id = '$shooterID'";

$shooters = mysql_query($query)
 or die(mysql_error());

$i = 0;
while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[$i];
 $i++;
}

$shooters = mysql_query("
 SELECT name FROM teams
 WHERE id = '$shooterID'")
 or die(mysql_error());

$i = 0;
while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[$i];
 $i++;
}

Спасибо


Попытка использовать методы здесь не полностью разрешила проблему (хотя еще раз спасибо). Вот мои пересмотренные усилия вместе с дальнейшим контекстом (мне не нужно санировать данные, поскольку они поступают непосредственно из другого запроса.

$shooters = mysql_query("
 SELECT * FROM events JOIN teams
 on events.shooter = teams.id
 ") or die(mysql_error());

$i = 0;
while($results = mysql_fetch_array( $shooters )) {
    $shooterIDs[$i] = $results[0];
    $i++;
}

//var_dump($shooterIDs); == array(1) { [0]=>  string(1) "1" } 

$query = "
 SELECT name FROM teams
 WHERE id = '".$shooterID[0]."'";

$shooters = mysql_query($query)
 or die(mysql_error());

while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[0];
}

Оказалось, что в моей последней попытке отсутствовала 's' в переменной namee $shooterIDs [0]. Глупая ошибка. Возможно, были и другие, которые уже были решены с вашей помощью. Спасибо!

Теги:

5 ответов

4
Лучший ответ

Запрос не является вашей проблемой, вывод:

Это неправильно:

$i = 0;
while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[$i];
 $i++;
}

Это правильно:

while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[0];
}

И

Просто убедитесь, что вы правильно дезинфицируете свой ввод, если хотите включить такую ​​переменную. Например:

$shooterID = (int)$_GET['shooter_id'];

Это заставляет номер либо быть 0, если он не является числом или 1, если они передаются в shooter_id[]=somthing, но никогда не может быть строкой ввода SQL.

  • 3
    +1 за правильно санированный ввод.
0

Кроме того, вам, вероятно, потребуется некоторое разделение на вашем выходе:

while ($shooter = mysql_fetch_array( $shooters )) 
{
   echo $shooter[0], "\n";   //  or '<br>' if outputting to html
}
0

Попробуйте что-нибудь подобное (комментарии добавлены для ясности):

// Create the query, assuming $shooterID is an integer
$query = "SELECT name FROM teams WHERE id = '{$shooterID}'";

// Execute query
$shooters = mysql_query($query);

// Check result
if (!$shooters) { die(mysql_error()); }

// Iterate through rows
while ($shooter = mysql_fetch_array($shooters)) {
  // To display the entire $shooter array
  print_r($shooter);

  // To select the first item in $shooter array (no matter what it is)
  echo $shooter[0];

  // To specifically select the name field in $shooter array
  echo $shooter['name'];

  // To iterate over the $shooter array and display all fields
  // This will only be the name, unless you change the query to SELECT * FROM,
  // in which case this will return all fields in the table
  foreach ($shooter as $field) {
    echo $field;
  }
}
0

Не помещайте одиночные кавычки вокруг $shooterID внутри запроса.

вам, вероятно, также захочется что-то вроде:

while($shooter = mysql_fetch_array( $shooters )) {
 echo $shooter[0];
 $i++;
}

чтобы распечатать результаты.

  • 0
    я пробовал это я боюсь
  • 0
    @John вы хотели бы mysql_fetch_assoc если вы хотите обратиться к нему по имени столбца.
Показать ещё 2 комментария
0

Вы пробовали:

 $query = "SELECT name FROM teams WHERE id = '" . $shooterID . "'";

Кроме того, я не вижу, чтобы вы определяли $shooterID в любом месте, убедитесь, что вы его определяете.
То есть.

$shooterID = 0;

Кроме того,

$i = 0;  
while($shooter = mysql_fetch_array( $shooters )) {
     echo $shooter[$i];
     $i++;
}

должен быть

while($shooter = mysql_fetch_array( $shooters )) {
     echo $shooter[0];
}

или

while($shooter = mysql_fetch_array( $shooters )) {
     echo $shooter['name'];
}

или

while($shooter = mysql_fetch_object( $shooters )) {
     echo $shooter->name;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню