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_idSELECT 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れたクエリを作成した後にのみ機能することに注意してください。現在のセッションの前に挿入された最新の ID は返されません。そのために、たとえば次のことができます。INSERTAUTO_INCREMENT

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 に答える