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 ...查询");

$id = mysql_insert_id();

然后在编写与该插入行相关的其他查询时引用该 ID。

于 2012-10-09T14:49:07.940 回答
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 回答
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 回答
0

要从任何表中获取最后两条记录,您可以使用以下查询

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