1

Zend Framework と MySql を使用して Web アプリケーションを作成しています。現時点で私のSQLコードは次のとおりです。

public static function newTestResult($testId, $accountId, $score, $deviation, $averageTime)
    {
        try
        {
            $db = self::conn();
            $statement = "INSERT INTO test_results(test_id, test_person_id, score, standard_deviation, average_answer_time, created_at)
                                        VALUES(" . $testId . ", " . $accountId . ", " . $score . ", " . $deviation . ", " . $averageTime . ", NOW())";
            $db->query($statement);
            $db->closeConnection();
        }
        catch(Zend_Db_Exception $e)
        {
            error_log($e->getMessage());
        }
    }

今私が求めているのは、挿入されたばかりの行をPHPの変数に取得するにはどうすればよいですか? 行に対してMySqlが自動的に作成するID値を手に入れたいと思います。

ここに私のテーブルコードがあります:

CREATE TABLE test_results(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
test_id int UNSIGNED NOT NULL,
test_person_id int UNSIGNED NOT NULL,
score float UNSIGNED NOT NULL,
standard_deviation float UNSIGNED NOT NULL,
average_answer_time float UNSIGNED NOT NULL, 
removed boolean NOT NULL DEFAULT 0,
created_at datetime) CHARACTER SET utf8 COLLATE utf8_general_ci;
4

6 に答える 6

3

MySQL 関数「LAST_INSERT_ID()」を見てください。

于 2012-10-09T14:46:53.893 に答える
2

利用可能な方法の詳細については、このフォーラムも参照してください。 http://forums.phpfreaks.com/topic/188084-get-last-mysql-id-using-zend-frameworks/

「プレーンな」PHPでは、通常mysql_関数を使用します。mysql_insert_id()関数は、最後に挿入された行のキーを返します。私はZendの方法を使用することについてこれを主張しているのではなく、コンテキストを与えるだけです。

mysql_query( "INSERT INTO ... query");

$ id = mysql_insert_id();

次に、そのIDを参照して、挿入された行に関連する他のクエリを記述します。

于 2012-10-09T14:49:07.940 に答える
1

MySQL のマニュアルから: 「AUTO_INCREMENT 列を含むテーブルにレコードを挿入すると、mysql_insert_id() 関数を呼び出すことで、その列に格納されている値を取得できます。」これは C 関数を指します。

PHP マニュアルでは、代わりに PDO 関数を使用することをお勧めします。http://php.net/manual/en/function.mysql-insert-id.php PDO::lastInsertId

そしてどうやら、「Zend_Db_Table の insert() メソッドは、最後の挿入 ID の値を返す」ようです。http://osdir.com/ml/php.zend.framework.db/2007-04/msg00055.html

于 2012-10-09T14:47:46.380 に答える
1

これを試して:

$query="SELECT id FROM test_results WHERE test_id=$testId";
$id=$db->query($query);

これがあなたが探しているものだと思いますが、それ以外の場合は、WHERE 条件を必要なものに変更できます。

于 2012-10-09T14:42:42.947 に答える
1

これにより、最後に作成されたクエリからの最後の挿入 ID が得られます。

$db->lastInsertId()
于 2012-10-09T14:43:56.363 に答える
0

任意のテーブルから最後の 2 つのレコードを取得するには、次のクエリを使用できます

SELECT * FROM aa WHERE ID IN(
    (SELECT  COUNT(*) FROM aa),
    (SELECT  COUNT(*) FROM aa)-1
)
于 2013-09-24T06:22:02.717 に答える