你把什么放在mysql_insert_id()的括号中?

时间:2011-03-18 19:21:13

标签: php mysql mysql-insert-id

我尝试设置这样的变量:$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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您应该添加链接标识符(mysql_connect()的输出,而不是mysql_query()

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

答案 2 :(得分: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;

答案 3 :(得分:0)

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