将数据插入MySql表奇怪的异常

时间:2010-08-23 09:02:06

标签: php mysql apache windows-xp

我正在使用此代码在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”)语句导致它。数据库是创建的,也是表...

我在windows xp sp 2上运行php 5.3和mysql 5.1。

欢迎任何想法......

...谢谢

2 个答案:

答案 0 :(得分:2)

任何mysql_ *函数都可能因各种原因而失败。您必须检查返回值,如果函数指示错误(通常通过返回FALSE),您的脚本必须做出适当的反应。
mysql_error($ link)和mysql_errno($ link)可以为您提供有关原因的更详细信息。但是您不希望向任何用户显示所有细节,请参阅CWE-209: Information Exposure Through an Error Message

如果未将mysql_connect()返回的连接资源传递给后续的mysql_ *函数调用,则php假定上次成功建立连接。你不应该依赖它;更好地将链接资源传递给函数。 a)如果每页有多个连接,则无论如何都必须通过。 b)如果没有有效的数据库连接,php-mysql模块会尝试建立默认连接,这通常不是你想要的;它只需要更多的时间来失败..再次。

<?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 :(得分: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(),它会告诉你失败的原因以及原因