1

我尝试设置这样的变量:$test_id = mysql_insert_id($dbc);因为我想获取插入的最后一行的 id。我能够连接到数据库并插入该行,但下一行(设置 $test_id)它说:supplied argument is not a valid MySQL-Link resource。有任何想法吗?

这是代码:

$user_id = $_SESSION['user_id'];

$q = "INSERT INTO tests (user_id, title, subject, creation_date) VALUES ('$user_id', '$title', '$subj', NOW())"; //query to insert test details into tests table
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
$test_id = mysql_insert_id($dbc);

if (mysqli_affected_rows($dbc) == 1) {//if the query ran correctly and the test details were added to the database

$q = "INSERT INTO content (test_id, field1) VALUES ($test_id, '$content')"; //query to insert test content into content table
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

$dbc 是这样定义的:

$dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASS, DB_NAME);

4

4 回答 4

2

来自评论:哦,我现在明白了。您正在将 mysql_* 与 mysqli_* 函数混合使用。这些是不同的库。他们不混合。请改用 mysqli_insert_id()。

于 2011-03-18T19:23:23.490 回答
0

你应该把链接标识符(的输出mysql_connect(),不是mysql_query()

mysql_insert_id隐式调用SELECT LAST_INSERT_ID()是特定于会话的。

于 2011-03-18T19:23:27.607 回答
0

通常你可以省略那个参数;它会知道您打开了一个数据库连接。如果要指定连接,请使用来自的返回值mysql_connect

$dbc = mysql_connect('localhost', 'mysql_user', 'mysql_password');

// later
echo mysql_insert_id($dbc);

同样,这通常不是必需的。

还要记住,mysql_insert_id只有在您进行INSERT了索引列AUTO_INCREMENT递增的查询之后才会起作用。它不会返回在当前会话之前的某个时间插入的最新 ID。为此,您可以例如执行以下操作:

SELECT MAX(id) FROM some_table;
于 2011-03-18T19:34:29.037 回答
0

问题是您在 MySQL 函数中使用 MySQLi 资源(注意缺少的i)。那里有 2 个不同的扩展名。如果您正在使用mysqli,请不要切换到mysql. 所以只需将该功能更改为mysqli_insert_id($dbc);

于 2011-03-18T19:40:10.937 回答