MySQL INSERT INTO с переменной PHP $

Я могу использовать $variable там $strSQL = "SELECT * FROM $person"; Но я не могу использовать $variable там $sql = "INSERT INTO $person . . .

`$person` 

Тоже не работай...

Какая разница? И как я могу использовать $variable вместо имени таблицы (INSERT INTO table_name)

$sql = 'INSERT INTO $person (date, min, sec, count, temp, universal)
    VALUES("'.$date.'", "'.$min.'", "'.$sec.'", "'.$count.'", "'.$temp.'", "'.$universal.'")';
    if(!mysql_query($sql))
    {echo '<center><p><b>ERROR!</b></p></center>';}
    else
    {echo '<center><p><b>Its okay</b></p></center>';}
        }

Решение:

mysql_query("INSERT INTO $person (date, min, sec, count, temp, universal) VALUES('$date', '$min', '$sec', '$count', '$temp', '$universal')") or die(mysql_error());

person user2363784    schedule 06.03.2015    source источник
comment
возможный дубликат переменной PHP в качестве имени таблицы в SQL-запросе   -  person wayzz    schedule 06.03.2015
comment
Переменная - это строка, поэтому она должна быть заключена в кавычки.   -  person Amit Verma    schedule 06.03.2015
comment
Используйте обратную связь вокруг переменной, это решит вашу проблему   -  person Amit Verma    schedule 06.03.2015
comment
Откуда берутся эти переменные, user2363784? Если они исходят от $_GET, $_POST и т. д., то в этом коде есть уязвимости SQL-инъекций. Немного беспокоит, что из всех пользователей ниже, которые помогли, ни один не упомянул об этом.   -  person halfer    schedule 07.03.2015
comment
mysqli_query теперь используется вместо mysql_query. Не используйте mysql_query: не находится в активной разработке, официально объявлен устаревшим с PHP 5.5 (выпущен в июне 2013 г.), полностью удален с PHP 7.0 (выпущен в декабре 2015 г.), см.: stackoverflow.com/a/12860046/1887492   -  person cooler    schedule 31.08.2020


Ответы (4)


Вы можете использовать вот так

mysql_query("INSERT INTO `$person` VALUES(...) ")
or die(mysql_error());

Вы закрыли if и else неправильно

просто вы можете попробовать это

$sql = 'INSERT INTO `name`(date, min, sec, count, temp, universal)
        VALUES("'.$date.'", "'.$min.'", "'.$sec.'", "'.$count.'", "'.$temp.'", "'.$universal.'")';

$sql = 'INSERT INTO $person (date, min, sec, count, temp, universal)
    VALUES("'.$date.'", "'.$min.'", "'.$sec.'", "'.$count.'", "'.$temp.'", "'.$universal.'")';
    if(!mysql_query($sql)) {
    echo '<center><p><b>ERROR!</b></p></center>';
    }else{ 
    echo '<center><p><b>Its okay</b></p></center>';
    }
    }// so where this comes from ?
person I'm Geeker    schedule 06.03.2015
comment
как называлась ваша таблица? что должно быть напечатано в $person @user2363784 - person I'm Geeker; 06.03.2015
comment
Похоже проблема в другом - person Amit Verma; 06.03.2015
comment
просто имя человека - person user2363784; 06.03.2015
comment
проверьте мой обновленный ответ, просто используйте имя в запросе на вставку вместо $person - person I'm Geeker; 06.03.2015
comment
mysql_query(ВСТАВИТЬ В $person (дата, мин, сек, количество, временный, универсальный) VALUES('.$date.', '.$min.', '.$sec.', '.$count.', '. $temp.', '.$universal.')) или die(mysql_error()); - person user2363784; 06.03.2015
comment
Ошибка синтаксического анализа: синтаксическая ошибка, непредвиденная дата ''.$date.'' (T_CONSTANT_ENCAPSED_STRING) - person user2363784; 06.03.2015
comment
используйте этот mysql_query (INSERT INTO name (date, min, sec, count, temp, universal) VALUES ('$ date', '$ min', '$ sec', '$ count', '$ temp', '$ universal ')) или умереть(mysql_error());` - person I'm Geeker; 06.03.2015
comment
Нет, закрыть можно. Я просто копирую больше, чем нужно - person user2363784; 06.03.2015
comment
Итак... у меня эхо ОШИБКА! - person user2363784; 06.03.2015
comment
Можете ли вы экспортировать базу данных и сделать так, чтобы sqlfiddle вам не помог - person I'm Geeker; 06.03.2015
comment
mysql_query(INSERT INTO $person (date, min, sec, count, temp, universal) VALUES('$date', '$min', '$sec', '$count', '$temp', '$universal' )) или умереть(mysql_error()); - person user2363784; 06.03.2015
comment
Не используйте mysql_query — он был полностью удален с PHP 7.0 (выпущен в декабре 2015 г.), см.: stackoverflow.com/a/12860046/1887492. - person cooler; 31.08.2020

каково значение вашей переменной $person?

если это значение хорошее и существующее имя таблицы в вашей базе данных, нет проблем, вы можете попробовать:

$strSQL = "SELECT * FROM {$person}";

person nekiala    schedule 06.03.2015
comment
значение просто имя, строка - person user2363784; 06.03.2015

Мне нравится использовать sprintf для этого.

$stmt = $pdo->prepare(sprintf("INSERT INTO %s VALUES(...)", $person));
$stmt->execute();
person kylehyde215    schedule 06.03.2015
comment
Лучше не приводить пример с расширением mysql, которое устарело с PHP 5.3, а лучше привести пример с использованием mysqli. - person Lexib0y; 06.03.2015

Может быть, с чем-то вроде этого:

$query = mysqli_query($connect, "INSERT INTO `$person` VALUES(...) ")
or die(mysql_error());
person Clafou    schedule 06.03.2015
comment
Не могли бы вы опубликовать свой mysql_query? - person Clafou; 06.03.2015
comment
Лучше не приводить пример с расширением mysql, которое устарело с PHP 5.3, а лучше привести пример с использованием mysqli. - person Lexib0y; 06.03.2015
comment
Ой, извини. Да, у меня такая же ошибка. С синтаксисом все в порядке, но добавление в таблицу не работает - person user2363784; 06.03.2015
comment
Действительно, использование mysqli лучше. $query = mysqli_query($connect, INSERT INTO $person VALUES(...)) или die(mysql_error()); - person Clafou; 06.03.2015
comment
выкладываю полную версию - person user2363784; 06.03.2015