Вставить данные в таблицу MySql странное исключение

0

Я использую этот код для вставки некоторых значений в таблицу 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.

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

Спасибо...

  • 1
    Мне кажется не очень разумным позволить приложению входить в базу данных от имени пользователя root и вводить пароль в виде простого текста прямо на самой странице.
  • 0
    Есть ли в файле журнала ошибок httpd что-то, что может быть связано? Возможно, вы захотите увеличить как php, так и уровень журнала httpd для этого теста. см. httpd.apache.org/docs/2.2/mod/core.html#loglevel и docs.php.net/errorfunc.configuration#ini.error-reporting
Показать ещё 3 комментария
Теги:
windows-xp

2 ответа

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

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

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

<?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), "</pre>\n";
  if ( defined('DEBUGOUTPUT') && DEBUGOUTPUT ) {
    echo '<pre>', htmlspecialchars($detail), "</pre>\n";
  }
  if ( $die ) {
    die;
  }
}
1

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

$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(), он сообщит вам, где он потерпел неудачу, и почему

  • 0
    +1 хорошо сделано, показывая, как использовать или умереть и использовать mysql_error, но вы должны также использовать ошибку подключения php mysql, и то же самое касается выбора БД.

Ещё вопросы

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