Вставить данные в таблицу MySql странное исключение - PullRequest
0 голосов
/ 23 августа 2010

Я использую этот код для вставки некоторых значений в таблицу MySql:

<?php
mysql_connect("localhost","root","root");
mysql_select_db("bib");

$id = "12";
$titlu = "Joe";

$query = "INSERT INTO carte SET id='$id', titlu='$titlu'";
$result = mysql_query($query);

// Display an appropriate message
if ($result)
echo "<p>Product successfully inserted!</p>";
else
echo "<p>There was a problem inserting the Book!</p>";

mysql_close();
?>

После запуска в браузере возникает следующая ошибка:

"Apache HTTP Server столкнулся с проблемой и должен быть закрыт. Приносим извинения за неудобства."

Похоже, что mysql_select_db ("bib") оператор вызывает его. База данных создана, а также таблица ...

Я использую php 5.3 и mysql 5.1 на windows xp sp 2.

Пожалуйста, любые идеи приветствуются ...

Спасибо ...

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Любая из функций mysql_ * может не работать по разным причинам. Вы должны проверить возвращаемые значения, и если функция сообщает об ошибке (обычно возвращая FALSE), ваш скрипт должен реагировать соответствующим образом.
mysql_error ($ link) и mysql_errno ($ link) могут предоставить вам более подробную информацию о причине. Но вы не хотите показывать все детали какому-либо произвольному пользователю, см. CWE-209: раскрытие информации через сообщение об ошибке .

Если вы не передадите ресурс подключения, возвращенный mysql_connect (), к последующим вызовам функций mysql_ *, php предполагает последнее успешно установленное соединение. Вы не должны полагаться на это; лучше передать ресурс ссылки на функции. а) Если у вас когда-либо есть более одного соединения на страницу, вы все равно должны пройти его. б) Если нет действительного соединения с БД, модули php-mysql пытаются установить соединение по умолчанию, которое обычно не то, что вам нужно; это займет больше времени, чтобы потерпеть неудачу .. снова.

<code><?php
define('DEBUGOUTPUT', 1);

$mysql = mysql_connect("localhost","root","root");
if ( !$mysql ) {
  foo('query failed', mysql_error());
}

$rc = mysql_select_db("bib", $mysql);
if ( !$rc) {
  foo('select db', mysql_error($mysql));
}

$id = "12";
$titlu = "Joe";

$query = "INSERT INTO carte SET id='$id', titlu='$titlu'";
$result = mysql_query($query, $mysql);

// Display an appropriate message
if ($result) {
  echo "<p>Product successfully inserted!</p>";
}
else {
  foo("There was a problem inserting the Book!", mysql_error($mysql), false);
}

mysql_close($mysql);

function foo($description, $detail, $die=false) {
  echo '<pre>', htmlspecialchars($description), "
\ п "; если (определено ('DEBUGOUTPUT') && DEBUGOUTPUT) { echo '
', htmlspecialchars($detail), "
\ n "; } if ($ die) { умереть; } }
1 голос
/ 23 августа 2010

попробуйте подключиться к базе данных:

$mysqlID = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die("Unable to connect to database");
mysql_select_db(DB_DATABASE) or die("Unable to select database ".DB_DATABASE);

также попробуйте выполнить запрос вставки:

$query = "INSERT INTO carte (id, title)  values ('".$id."', '".addslashes($titlu)."')
$result = mysql_query($query) or die(mysql_error()); 

Используя die (), он сообщит вам, где находитсяне удалось и почему

...