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