Php 将数据插入MySql表异常

Php 将数据插入MySql表异常,php,mysql,apache,windows-xp,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 messa

我正在使用此代码在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();
?>

尝试以下方法连接到数据库:

$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(),它将告诉您它在哪里失败以及为什么要连接到数据库:

$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(),它将告诉您它在哪里失败,以及任何mysql_*函数由于各种原因失败的原因。您必须检查返回值,如果函数指示错误(通常通过返回
FALSE
),您的脚本必须做出适当的反应。
mysql\u error($link)和mysql\u errno($link)可以为您提供更详细的原因信息。但您不希望仅向任意用户显示所有详细信息,请参阅

如果不将mysql_connect()返回的连接资源传递给后续的mysql_*函数调用,php将假定最后成功建立的连接。你不应该依赖它;最好将链接资源传递给函数。a) 如果您每页都有多个连接,您必须通过它。b) 如果没有有效的db连接,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;
  }
}

任何mysql_*函数都可能由于各种原因而失败。您必须检查返回值,如果函数指示错误(通常通过返回
FALSE
),您的脚本必须做出适当的反应。
mysql\u error($link)和mysql\u errno($link)可以为您提供更详细的原因信息。但您不希望仅向任意用户显示所有详细信息,请参阅

如果不将mysql_connect()返回的连接资源传递给后续的mysql_*函数调用,php将假定最后成功建立的连接。你不应该依赖它;最好将链接资源传递给函数。a) 如果您每页都有多个连接,您必须通过它。b) 如果没有有效的db连接,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;
  }
}

在我看来,允许应用程序以root用户身份登录数据库并将明文密码放在页面本身并不明智。httpd的错误日志文件中是否有相关内容?您可能希望为该测试同时增加php和httpd的日志级别。请参阅:和@user398920,转到您的用户配置文件,查看您以前的问题,并选择适当的答案(单击最佳答案上的绿色复选标记)。您是否检查了apache/php错误日志?运行
telnet localhost 3306
时会发生什么?您可以使用您的用户和密码登录mysql吗?apache错误日志文件的输出是什么?我认为允许应用程序以root用户身份登录数据库并将明文密码放在页面本身并不明智。httpd的错误日志文件中是否有相关内容?您可能希望为该测试同时增加php和httpd的日志级别。请参阅:和@user398920,转到您的用户配置文件,查看您以前的问题,并选择适当的答案(单击最佳答案上的绿色复选标记)。您是否检查了apache/php错误日志?运行
telnet localhost 3306
时会发生什么?您可以使用您的用户和密码登录mysql吗?apache错误日志文件的输出是什么?+1很好地展示了如何使用或死亡以及mysql错误用法,但您也应该使用连接php mysql错误,选择数据库也是如此。+1很好地展示了如何使用或死亡以及mysql错误用法,但您也应该使用连接php mysql错误,同样适用于数据库选择数据库。@user398920:虽然您写道这只是一个测试脚本,但请记住sql注入(并防止它们),请参阅;和@user398920:虽然您写道这只是一个测试脚本,但请记住sql注入(并防止它们),请参阅,和