PHP  
 PHP_5_6
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Test Failure Report for ext/pdo_mysql/tests/pdo_mysql_last_insert_id.phpt ('MySQL PDO->lastInsertId()')

Script

1: <?php
2:     
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR 'mysql_pdo_test.inc');
3:     
$db MySQLPDOTest::factory();
4:
5:     try {
6:         if (
'0' !== ($tmp $db->lastInsertId()))
7:             
printf("[001] No query has been run, lastInsertId() should return '0'/string got '%s'/%s\n",
8:                 
var_export($tmptrue), gettype($tmp));
9:
10:         if (
'0' !== ($tmp $db->lastInsertId('sequence_name')))
11:             
printf("[002] MySQL does not support sequences, expecting '0'/string got '%s'/%s\n",
12:                 
var_export($tmptrue), gettype($tmp));
13:
14:         
$db->exec('DROP TABLE IF EXISTS test');
15:         if (
'0' !== ($tmp $db->lastInsertId()))
16:             
printf("[003] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
17:
18:         
$db->exec(sprintf('CREATE TABLE test(id INT, col1 CHAR(10)) ENGINE=%s'PDO_MYSQL_TEST_ENGINE));
19:         if (
'0' !== ($tmp $db->lastInsertId()))
20:             
printf("[004] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
21:
22:         
$stmt $db->query('SELECT id FROM test LIMIT 1');
23:         if (
'0' !== ($tmp $db->lastInsertId()))
24:             
printf("[005] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
25:
26:         
// no auto increment column
27:         
$db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')");
28:         if (
'0' !== ($tmp $db->lastInsertId()))
29:             
printf("[006] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
30:
31:         
$db->exec('ALTER TABLE test MODIFY id INT AUTO_INCREMENT PRIMARY KEY');
32:         if (
'0' !== ($tmp $db->lastInsertId()))
33:             
printf("[006] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
34:
35:         
// duplicate key
36:         
@$db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')");
37:         if (
'0' !== ($tmp $db->lastInsertId()))
38:             
printf("[007] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
39:
40:         
$db->exec("INSERT INTO test(id, col1) VALUES (101, 'b')");
41:         if (
'101' !== ($tmp $db->lastInsertId()))
42:             
printf("[008] Expecting '0'/string got '%s'/%s"var_export($tmptrue), gettype($tmp));
43:
44:         
$db->exec('ALTER TABLE test MODIFY col1 CHAR(10) UNIQUE');
45:         
// replace = delete + insert -> new auto increment value
46:         
$db->exec("REPLACE INTO test(col1) VALUES ('b')");
47:         
$next_id = (int)$db->lastInsertId();
48:
49:         if (
$next_id <= 101)
50:             
printf("[009] Expecting at least 102, got %d\n",$next_id);
51:
52:         
$stmt $db->query('SELECT LAST_INSERT_ID() as _last_id');
53:         
$row $stmt->fetch(PDO::FETCH_ASSOC);
54:         
$last_id $row['_last_id'];
55:         if (
$next_id != $last_id) {
56:             
printf("[010] LAST_INSERT_ID() = %d and lastInserId() = %d differ\n",
57:                 
$last_id$next_id);
58:         }
59:
60:         
$db->exec("INSERT INTO test(col1) VALUES ('c'), ('d'), ('e')");
61:         
$next_id = (int)$db->lastInsertId();
62:         if (
$next_id <= $last_id)
63:             
printf("[011] Expecting at least %d, got %d\n"$last_id 1$next_id);
64:
65:         
// warnings are unhandy, lets go for exceptions for a second
66:         
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
67:         try {
68:             
$ignore_exception true;
69:             
$db->exec('LOCK TABLE test WRITE');
70:             
$ignore_exception false;
71:
72:             if (
MySQLPDOTest::getServerVersion($db) >= 50000) {
73:                 
$stmt $db->query('SELECT @@auto_increment_increment AS inc');
74:                 
$row $stmt->fetch(PDO::FETCH_ASSOC);
75:                 
$inc $row['inc'];
76:             } else {
77:                 
$inc 1;
78:             }
79:
80:             
$stmt $db->query('SELECT LAST_INSERT_ID() as _last_id');
81:             
$row $stmt->fetch(PDO::FETCH_ASSOC);
82:             
$last_id $row['_last_id'];
83:
84:             
$db->exec("INSERT INTO test(col1) VALUES ('z')");
85:             
$next_id = (int)$db->lastInsertId();
86:             if (
$next_id < ($last_id $inc))
87:                 
printf("[012] Expecting at least %d, got %d\n"$last_id $inc$next_id);
88:
89:         } catch (
PDOException $e) {
90:             if (!
$ignore_exception)
91:                 
printf("[014] %s, [%s} %s\n"$e->getMessage(), $db->errorCode(), implode(' '$db->errorInfo()));
92:         }
93:         
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_WARNING);
94:         @
$db->exec('UNLOCK TABLE test');
95:
96:     } catch (
PDOException $e) {
97:         
printf("[001] %s [%s] %s\n",
98:             
$e->getMessage(), $db->errorCode(), implode(' '$db->errorInfo()));
99:     }
100:
101:     print 
"done!";
102:
?>
103:

Expected

done!

Output

Out of memory

Diff

001+ Out of memory
001- done!

 

Generated at Mon, 27 Nov 2017 05:04:32 +0000 (16 days ago)

Copyright © 2005-2017 The PHP Group
All rights reserved.