Вот мои неудачные попытки включить 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]. Глупая ошибка. Возможно, были и другие, которые уже были решены с вашей помощью. Спасибо!
Запрос не является вашей проблемой, вывод:
Это неправильно:
$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.
Кроме того, вам, вероятно, потребуется некоторое разделение на вашем выходе:
while ($shooter = mysql_fetch_array( $shooters ))
{
echo $shooter[0], "\n"; // or '<br>' if outputting to html
}
Попробуйте что-нибудь подобное (комментарии добавлены для ясности):
// 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;
}
}
Не помещайте одиночные кавычки вокруг $shooterID внутри запроса.
вам, вероятно, также захочется что-то вроде:
while($shooter = mysql_fetch_array( $shooters )) {
echo $shooter[0];
$i++;
}
чтобы распечатать результаты.
mysql_fetch_assoc
если вы хотите обратиться к нему по имени столбца.
Вы пробовали:
$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;
}