Php mysql\u insert\u id()始终返回0

Php mysql\u insert\u id()始终返回0,php,mysql,Php,Mysql,我搜索了4个小时,仍然找不到这个函数返回0的正确答案。它昨天起作用了,但现在我对脚本做了一些修改(很多事情都改变了)。。。我知道有很多像我这样的话题,但我找不到正确的答案 my index.php上有4个文本输入。我用update.php文件(POST方法)捕获它们 下面是update.php的一部分 <?php include "db.php"; connect_to_db(); require_once('recaptchalib.php'); $privatekey = "N/A"

我搜索了4个小时,仍然找不到这个函数返回0的正确答案。它昨天起作用了,但现在我对脚本做了一些修改(很多事情都改变了)。。。我知道有很多像我这样的话题,但我找不到正确的答案

my index.php上有4个文本输入。我用update.php文件(POST方法)捕获它们

下面是update.php的一部分

<?php
include "db.php";
connect_to_db();

require_once('recaptchalib.php');
$privatekey = "N/A";
$resp = recaptcha_check_answer ($privatekey,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
    echo 'Tekst sa slike je pogresno prepisan. Vracamo Vas natrag.';
    echo '<meta http-equiv="refresh" content="5; URL=../">';

} else {
    $pic1 = $_POST["pic1"];
    $p1 = htmlspecialchars($pic1);
    $pic2 = $_POST["pic2"];
    $p2 = htmlspecialchars($pic2);
    $html = $_POST["html"];
    $h = htmlspecialchars($html);
    $link = $_POST["link"];
    $l = htmlspecialchars($link);

    $id = mysql_insert_id();

    $query = "INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES ({$id}, '{$p1}', '{$p2}','{$h}','{$l}')";
    $result = mysql_query($query) or die(mysql_error());
}

include_once("config.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title><?php echo $title; ?></title>
<script type="text/javascript" src="cufon-yui.js"></script>
<script type="text/javascript"  src="font.js"></script>
<script type="text/javascript">
    Cufon.set('fontSize', '20px').replace('body');
</script>
</head>

<body>
<?php include_once("analytics.php"); ?>
<h1><?php echo $title; ?></h1>
<br />
<textarea name="one"><center><img src="<?php echo $p1; ?>" id="Like"></center></textarea>
<br />
<textarea name="two"><iframe width=800 height=500 frameborder=0 src="<?php echo $id; ?>"></iframe></textarea>
<br />
</body>
</html>
所以基本上,它会将所有内容发送到db(我可以通过phpMyAdmin看到)

问题是,它总是返回0作为我回显的id

它没有显示任何错误(PHP或MySQL)

[15:41]我已将update.php更新为:

    if (!$resp->is_valid) {
    echo 'Tekst sa slike je pogresno prepisan. Vracamo Vas natrag.';
    echo '<meta http-equiv="refresh" content="5; URL=../">';

} else {
    $pic1 = $_POST["pic1"];
    $p1 = htmlspecialchars($pic1);
    $pic2 = $_POST["pic2"];
    $p2 = htmlspecialchars($pic2);
    $html = $_POST["html"];
    $h = htmlspecialchars($html);
    $link = $_POST["link"];
    $l = htmlspecialchars($link);

    $query = "INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES ({$id}, '{$p1}', '{$p2}','{$h}','{$l}')";
    $result = mysql_query($query) or die(mysql_error());

    $id = mysql_insert_id();
}
?>

mysql\u查询之后执行
mysql\u插入\u id

查看文档,尽量不要再使用
mysql*
函数,红色框中有说明。 这些功能存在证券问题

mysql\u insert\u id
:检索上一次查询(通常是insert)为自动增量列生成的id


在您的代码中,当您执行
mysql\u insert\u id
时,没有执行任何插入操作。

do
mysql\u insert\u id
之后执行
mysql\u query

查看文档,尽量不要再使用
mysql*
函数,红色框中有说明。 这些功能存在证券问题

mysql\u insert\u id
:检索上一次查询(通常是insert)为自动增量列生成的id


在您的代码中,当您执行mysql\u insert\u id
时,没有进行任何插入。

在我的情况下,我也有
自动增量
,但我始终得到0

我发现的核心原因是用于DB连接的代码。以前我使用的代码导致返回0

// THIS CODE RETURNS ALWAYS "0"
$con = @mysql_connect($mysql_db_hostname, $mysql_db_user, $mysql_db_password, $mysql_db_database);    
if (!$con) {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
下面是我使用的正确代码,它开始运行良好

// THIS CODE RETURNS CORRECT VALUE OF LAST INSERTED ROW
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('openfire');

希望这对某人有所帮助。

在我的例子中,我也有
自动增量
,但我总是得到0

我发现的核心原因是用于DB连接的代码。以前我使用的代码导致返回0

// THIS CODE RETURNS ALWAYS "0"
$con = @mysql_connect($mysql_db_hostname, $mysql_db_user, $mysql_db_password, $mysql_db_database);    
if (!$con) {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
下面是我使用的正确代码,它开始运行良好

// THIS CODE RETURNS CORRECT VALUE OF LAST INSERTED ROW
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('openfire');

希望这对其他人有所帮助。

您的代码易受SQL注入攻击。使用参数化查询而不是
htmlspecialchars
。如果不转义数据,您将被黑客攻击。也不要使用MySQL_*函数。就像我说的:使用参数化查询(搜索MySQLi或PDO)。“有用的反SQL函数”在您的例子中被称为
MySQL_real_escape_string()
。@Sven:True,但
MySQL_*
函数已被弃用。您的代码易受SQL注入攻击。使用参数化查询而不是
htmlspecialchars
。如果不转义数据,您将被黑客攻击。也不要使用MySQL函数。就像我说的:使用参数化查询(搜索MySQLi或PDO)。“有用的反SQL函数”在您的例子中被称为
MySQL\u real\u escape\u string(),它们不再是最新的,缺乏功能,性能也低于mysqli。是的,当然,但是你需要更加小心。你很容易忘记逃跑之类的事情,破坏你的安全感app@GreenLeaf:使用MySQLi或PDO时也很容易忘记转义。这就是我建议使用参数化查询的原因。@GreenLeaf:现在它说“您的SQL语法有错误;在执行它之前,请查看与您的MySQL服务器版本对应的手册,以获得正确的语法使用方法”。@AnteDražIć1:echo$query,您应该理解为什么会出现错误;2:id不是自动递增的吗?我没有听说过mysql*函数的任何安全问题,它们不再是最新的,缺乏功能,性能也低于mysqli。是的,当然,但你需要更加小心。你很容易忘记逃跑之类的事情,破坏你的安全感app@GreenLeaf:使用MySQLi或PDO时也很容易忘记转义。这就是我建议使用参数化查询的原因。@GreenLeaf:现在它说“您的SQL语法有错误;在执行它之前,请查看与您的MySQL服务器版本对应的手册,以获得正确的语法使用方法”。@AnteDražIć1:echo$query,您应该理解为什么会出现错误;2:id不是自动递增的吗?
// THIS CODE RETURNS CORRECT VALUE OF LAST INSERTED ROW
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('openfire');