Что вы помещаете в скобки mysql_insert_id ()? - PullRequest
1 голос
/ 18 марта 2011

Я попытался установить переменную следующим образом: $test_id = mysql_insert_id($dbc);, потому что я хотел получить идентификатор последней вставленной строки.Я могу подключиться к базе данных и вставить строку, но на следующей строке (установка $ 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 ]

2 голосов
/ 18 марта 2011

Из комментариев: О, теперь я вижу. Вы смешиваете mysql_ * с функциями mysqli_ *. Это разные библиотеки. Они не смешиваются. Вместо этого используйте mysqli_insert_id ().

0 голосов
/ 18 марта 2011

Проблема в том, что вы используете ресурс MySQLi в функции MySQL (обратите внимание на отсутствующий i).Там есть 2 разных расширения.Если вы используете mysqli, не переключайтесь на mysql.Так что просто измените эту функцию на mysqli_insert_id($dbc);

0 голосов
/ 18 марта 2011

Обычно вы можете не указывать этот параметр; он будет знать, что у вас открыто соединение с базой данных. Если вы хотите указать соединение, используйте возвращаемое значение из mysql_connect:

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

// later
echo mysql_insert_id($dbc);

Опять же, это обычно не нужно.

Также имейте в виду, что mysql_insert_id будет работать только после того, как вы сделали запрос INSERT, в котором был увеличен столбец индекса с AUTO_INCREMENT. не вернет последний идентификатор, который был вставлен в другое время перед текущим сеансом. Для этого вы можете, например, сделать:

SELECT MAX(id) FROM some_table;
0 голосов
/ 18 марта 2011

Вы должны поместить идентификатор ссылки (вывод mysql_connect(), а не mysql_query())

mysql_insert_id неявно вызывает SELECT LAST_INSERT_ID(), который является специфичным для сеанса.

...