1

我搜索了 4 个小时,但仍然找不到正确的答案,为什么这个函数返回 0。它昨天工作,但现在我对脚本做了一些更改(很多东西已经改变)......我知道有很多像我这样的话题,但我不能找到正确的答案。

我的 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.php 中是:

<?php
define("DB_SERVER", "N/A");
define("DB_USER", "N/A");
define("DB_PASS", "N/A");
define("DB_NAME", "N/A");

function connect_to_db() {
    $connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die("There was an error connecting to the database: " . mysql_error());
    mysql_select_db(DB_NAME);
    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
    return $connection;
}
?>

N/A 表示我不会分享这些细节。

我的 db.sql:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+01:00";

CREATE TABLE IF NOT EXISTS `koraci` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `p1` varchar(255) NOT NULL,
  `p2` varchar(255) NOT NULL,
  `h` varchar(255) NOT NULL,
  `l` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES
(1, 'SOMETHING', 'SOMETHING', 'SOMETHING', 'SOMETHING');

所以基本上,它将所有内容发送到 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();
}
?>

现在我遇到了这个错误:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法”

[16:04] 如果我在查询后设置它,我可以看到查询中不包含 id。我说的是这个:

INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES (, 'SOMETHING', 'SOMETHING','SOMETHING','SOMETHING')
4

2 回答 2

7

mysql_insert_id之后做mysql_query

请查看此处的文档,并尝试不再使用这些mysql*功能,如红框中所述。这些功能存在安全问题。

mysql_insert_id:检索前一个查询(通常是 INSERT)为 AUTO_INCREMENT 列生成的 ID。

在您的代码中,当您这样做时mysql_insert_id,没有插入。

于 2013-04-20T13:01:06.667 回答
1

在我的情况下,我也有AUTO_INCREMENT,但我仍然总是得到 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');
于 2014-10-26T07:32:13.840 回答