PHP / MYSQL: возможность вставлять значения только в первую строку - PullRequest
1 голос
/ 03 декабря 2010

Мне интересно, обязательно ли для этого требуется массив и / или цикл, и какие решения могут решить эту проблему.В качестве учебного упражнения я пытаюсь вставить две из пяти переменных в две последовательные строки в МОЕМ SQL.Я создал простую таблицу с одним столбцом в SQL под названием test.Мой первый "INSERT INTO table VALUES ('$ Word1')";Оператор успешно вставляет значение в первую строку.Подобный / почти идентичный последующий код с $ Word2 не добавляет значение в SQL.Я представляю, что мне нужно каким-то образом перейти к следующему ряду, но я совершенно потерян, как этого добиться.Я тщетно изучал форумы, мою книгу по PHP и w3Schools.

/*retrieve user input from separate HTML input form */
/* and initializes variables */  
$Word1 = $_POST["Word1"];
$Word2 = $_POST["Word2"];
$Word3 = $_POST["Word3"];
$Word4 = $_POST["Word4"];
$Word5 = $_POST["Word5"];

//select db
mysql_select_db("madlibs", $con);  

//insert user input for word 1 into SQL
$sql = "INSERT INTO test (MadWords)
VALUES
('$Word1')";
if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}

//word 2      
/* ***THIS CODE AND MANY VARIATIONS OF IT FAIL TO ENTER $WORD2 INTO SQL*/
"INSERT INTO test (MadWords)
VALUES
('$Word2')";

if (!mysql_query($sql2,$con))    
  /*I've cut this if statement in other debugging runs with the same result*/
{
  die('Error: ' . mysql_error());
}  

echo "1 record added";

Ответы [ 5 ]

2 голосов
/ 03 декабря 2010

это может быть дублирование первичного ключа, которое мешает вставить вторые значения в таблицу.

1 голос
/ 03 декабря 2010

Вы никогда не объявляли свою переменную $ sql2. Он выполняет пустой запрос вместо того, который вы хотите выполнить.

//word 2      
/* ***THIS CODE AND MANY VARIATIONS OF IT FAIL TO ENTER $WORD2 INTO SQL*/
$sql2 = "INSERT INTO test (MadWords)
VALUES
('$Word2')";

if (!mysql_query($sql2,$con))    
  /*I've cut this if statement in other debugging runs with the same result*/
{
  die('Error: ' . mysql_error());
} 

Это должно быть исправлено, если нет кода, который не был опубликован.

Чтобы ответить на ваш комментарий, вы можете сделать что-то вроде:

foreach ($_POST as $value) {
  $sql = "Insert into test (madwords) values('$value')";
  mysql_query($sql,$con);
}
0 голосов
/ 03 декабря 2010
mysql> create database madlibs;
Query OK, 1 row affected (0.03 sec)

mysql> use madlibs;
Database changed

mysql> create table test(MadWords varchar(200));
Query OK, 0 rows affected (0.01 sec)        

mysql> select * from test;
Empty set (0.00 sec)

mysql> insert into test(MadWords) values ('foo');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----------+
| MadWords |
+----------+
| foo      |   
+----------+
1 row in set (0.00 sec)

mysql> insert into test(MadWords) values ('bar');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----------+
| MadWords |
+----------+
| foo      |   
| bar      |   
+----------+
2 rows in set (0.00 sec)

кажется в порядке.

Ваш ввод может быть испорчен. В приведенном примере вы фактически не устанавливали переменную $ sql2. Попробуйте использовать запросы непосредственно к базе данных без участия PHP, либо через командную строку, либо через PHPMyAdmin. Если у вас возникли проблемы с базой данных, и вы не уверены, находится ли она на уровне приложения или на уровне базы данных, распечатайте все запросы к базе данных буквально. То есть вместо использования mysql_query выведите запрос, который вы собираетесь запустить. Это выглядит так, как вы ожидаете? Попробуйте выполнить те запросы, которые вы получаете к базе данных самостоятельно.

Если у вас есть таблица для каждой истории MadLibs, для каждого слова должен быть столбец. Таким образом, вся заявка представляет собой одну строку. Должен быть столбец ID, чтобы идентифицировать эту строку; тогда вы можете полагаться только на этот идентификатор, чтобы получить все данные для всей этой заявки с select * from test where id = 12345; или чем-то еще.

0 голосов
/ 03 декабря 2010

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

  • Имеют ли поля Word1 и Word2 одинаковые значения?
  • Что вы получаете, когда запускаете EXPLAIN test в MySQL?
0 голосов
/ 03 декабря 2010

ваша проблема с ключом PRIMERY если вы создаете один столбец с идентификатором, который является первичным ключом, этот запрос работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...