diff options
-rw-r--r-- | lib/mysql.php | 319 | ||||
-rw-r--r-- | tests/MySqlShimTest.php | 237 |
2 files changed, 470 insertions, 86 deletions
diff --git a/lib/mysql.php b/lib/mysql.php index e7a2a57..e1a8013 100644 --- a/lib/mysql.php +++ b/lib/mysql.php @@ -46,9 +46,12 @@ namespace { $flags ); + // @codeCoverageIgnoreStart + // PHPUnit turns the warning from mysqli_real_connect into an exception, so this never runs if ($conn === false) { return false; } + // @codeCoverageIgnoreEnd $conn->hash = $hash; \Dshafik\MySQL::$connections[$hash] = ['refcount' => 1, 'conn' => $conn]; @@ -56,7 +59,10 @@ namespace { return $conn; } catch (\Throwable $e) { trigger_error($e->getMessage(), E_USER_WARNING); + // @codeCoverageIgnoreStart + // PHPUnit turns the warning into an exception, so this never runs return false; + // @codeCoverageIgnoreEnd } } @@ -76,7 +82,10 @@ namespace { $link = \Dshafik\MySQL::getConnection($link, __FUNCTION__); if ($link === null) { + // @codeCoverageIgnoreStart + // PHPUnit Warning -> Exception return false; + // @codeCoverageIgnoreEnd } if (isset(\Dshafik\MySQL::$connections[$link->hash])) { @@ -123,8 +132,10 @@ namespace { function mysql_db_query($databaseName, $query, \mysqli $link = null) { - mysql_select_db($databaseName, $link); - return mysql_query($query, $link); + if (mysql_select_db($databaseName, $link)) { + return mysql_query($query, $link); + } + return false; } function mysql_list_dbs(\mysqli $link = null) @@ -132,20 +143,25 @@ namespace { return mysql_query("SHOW DATABASES", $link); } - function mysql_list_tables(\mysqli $link = null) + function mysql_list_tables($databaseName, \mysqli $link = null) { - return mysql_query("SHOW TABLES", \Dshafik\MySQL::getConnection($link)); + $link = \Dshafik\MySQL::getConnection($link); + return mysql_query("SHOW TABLES FROM " . mysql_real_escape_string($databaseName, $link), $link); } function mysql_list_fields($databaseName, $tableName, \mysqli $link = null) { $link = \Dshafik\MySQL::getConnection($link); - return mysql_query( - "SHOW COLUMNS FROM " . + $result = mysql_query( + "SHOW FULL COLUMNS FROM " . mysqli_real_escape_string($link, $databaseName) . "." . mysqli_real_escape_string($link, $tableName), $link ); + if ($result instanceof \mysqli_result) { + $result->table = $tableName; + } + return $result; } function mysql_list_processes(\mysqli $link = null) @@ -199,28 +215,44 @@ namespace { return $rows; } - function mysql_num_fields(\mysqli_result $result) + function mysql_num_fields($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_num_fields($result); } - function mysql_fetch_row(\mysqli_result $result) /* : array|null */ + function mysql_fetch_row($result) /* : array|null */ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_row($result); } - function mysql_fetch_array(\mysqli_result $result) /* : array|null */ + function mysql_fetch_array($result) /* : array|null */ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_array($result); } - function mysql_fetch_assoc(\mysqli_result $result) /* : array|null */ + function mysql_fetch_assoc($result) /* : array|null */ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_assoc($result); } - function mysql_fetch_object(\mysqli_result $result, $class = null, array $params = []) /* : object|null */ + function mysql_fetch_object($result, $class = null, array $params = []) /* : object|null */ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } + if ($class == null) { return mysqli_fetch_object($result); } @@ -228,53 +260,83 @@ namespace { return mysqli_fetch_object($result, $class, $params); } - function mysql_data_seek(\mysqli_result $result, $offset) + function mysql_data_seek($result, $offset) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_data_seek($result, $offset); } - function mysql_fetch_lengths(\mysqli_result $result) /* : array|*/ + function mysql_fetch_lengths($result) /* : array|*/ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_lengths($result); } - function mysql_fetch_field(\mysqli_result $result) /* : object|*/ + function mysql_fetch_field($result) /* : object|*/ { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_field($result); } - function mysql_field_seek(\mysqli_result $result, $field) + function mysql_field_seek($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_field_seek($result, $field); } - function mysql_free_result(\mysqli_result $result) + function mysql_free_result($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_free_result($result); } - function mysql_field_name(\mysqli_result $result, $field) + function mysql_field_name($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return \Dshafik\MySQL::mysql_field_info($result, $field, 'name'); } - function mysql_field_table(\mysqli_result $result, $field) + function mysql_field_table($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return \Dshafik\MySQL::mysql_field_info($result, $field, 'table'); } - function mysql_field_len(\mysql_result $result, $field) + function mysql_field_len($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return \Dshafik\MySQL::mysql_field_info($result, $field, 'length'); } - function mysql_field_type(\mysql_result $result, $field) + function mysql_field_type($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return \Dshafik\MySQL::mysql_field_info($result, $field, 'type'); } - function mysql_field_flags(\mysql_result $result, $field) + function mysql_field_flags($result, $field) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return \Dshafik\MySQL::mysql_field_info($result, $field, 'flags'); } @@ -338,59 +400,80 @@ namespace { return mysqli_set_charset(\Dshafik\MySQL::getConnection($link), $charset); } - function mysql_db_name(\mysqli_result $result) + function mysql_db_name($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_row($result)['Database']; } - function mysql_table_name(\mysqli_result $result) + function mysql_table_name($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysqli_fetch_row($result)['Table']; } /* Aliases */ - function mysql_fieldname(\mysqli_result $result) + function mysql_fieldname($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysql_field_name($result); } - function mysql_fieldtable(\mysqli_result $result) + function mysql_fieldtable($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysql_field_table($result); } - function mysql_fieldlen(\mysqli_result $result) + function mysql_fieldlen($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysql_field_len($result); } - function mysql_fieldtype(\mysqli_result $result) + function mysql_fieldtype($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysql_field_type($result); } - function mysql_fieldflags(\mysqli_result $result) + function mysql_fieldflags($result) { + if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) { + return false; + } return mysql_field_flags($result); } - function mysql_selectdb($databaseName, \mysql $link = null) + function mysql_selectdb($databaseName, \mysqli $link = null) { return mysql_select_db($databaseName, $link); } - function mysql_freeresult(\mysqli_result $result) + function mysql_freeresult($result) { return mysql_free_result($result); } - function mysql_numfields(\mysqli_result $result) + function mysql_numfields($result) { return mysql_num_fields($result); } - function mysql_numrows(\mysqli_result $result) + function mysql_numrows($result) { return mysql_num_rows($result); } @@ -410,12 +493,12 @@ namespace { return mysql_list_fields(... $args); } - function mysql_dbname(\mysqli_result $result) + function mysql_dbname($result) { return mysql_db_name($result); } - function mysql_tablename(\mysqli_result $result) + function mysql_tablename($result) { return mysql_table_name($result); } @@ -439,6 +522,7 @@ namespace Dshafik { $err = $func . "(): no MySQL-Link resource supplied"; } trigger_error($err, E_USER_WARNING); + return false; } return static::$last_connection; @@ -446,23 +530,176 @@ namespace Dshafik { static public function mysql_field_info(\mysqli_result $result, $field, $what) { - $field = mysqli_fetch_field_direct($result, $field); - if ($field === false) { + if (!\mysqli_data_seek($result, $field)) { trigger_error( - E_WARNING, sprintf( - "Field %d is invalid for MySQL result index %s", + "mysql_field_name(): Field %d is invalid for MySQL result index %s", $field, spl_object_hash($result) - ) + ), + E_USER_WARNING ); + // @codeCoverageIgnoreStart + // PHPUnit turns the warning into an exception, so this never runs + return false; + // @codeCoverageIgnoreEnd } - if (isset($field->{$what})) { - return $field->{$what}; + $field = \mysql_fetch_assoc($result); + + switch ($what) { + case "name": + return $field['Field']; + case "table": + return $result->table; + case "length": + case "type": + $matches = []; + preg_match("/(?<type>[a-z]+)(?:\((?<length>.+)\))?/", $field['Type'], $matches); + if (!isset($matches[$what])) { + $matches[$what] = null; + } + if ($what == 'length') { + return static::getFieldLength($matches[$what], $field['Type']); + } + return static::getFieldType($matches[$what]); + case "flags": + $flags = []; + if ($field['Null'] == "NO") { + $flags[] = "not_null"; + } + + if ($field['Key'] == 'PRI') { + $flags[] = "primary_key"; + } + + if (strpos($field['Extra'], "auto_increment") !== false) { + $flags[] = "auto_increment"; + } + + if ($field['Key'] == 'UNI') { + $flags[] = "unique_key"; + } + + if ($field['Key'] == 'MUL') { + $flags[] = "multiple_key"; + } + + $type = strtolower($field['Type']); + if (in_array(substr($type, -4), ["text", "blob"])) { + $flags[] = "blob"; + } + + if (substr($type, 0, 4) == "enum") { + $flags[] = "enum"; + } + + if (substr($type, 0, 3) == "set") { + $flags[] = "set"; + } + + return implode(" ", $flags); } return false; } + + static function checkValidResult($result, $function) + { + if (!($result instanceof \mysqli_result)) { + trigger_error( + $function . "() expects parameter 1 to be resource, " . gettype($result) . " given", + E_USER_WARNING + ); + return false; + } + } + + protected static function getFieldLength($what, $type) + { + if (is_numeric($what)) { + return (int) $what; + } + + switch ($type) { + case "text": + case "blob": + return 65535; + case "longtext": + case "longblob": + return 4294967295; + case "tinytext": + case "tinyblob": + return 255; + case "mediumtext": + case "mediumblob": + return 16777215; + } + + if (strtolower(substr($type, 0, 3)) == "set") { + return (int)strlen($what) + - 2 // Remove open and closing quotes + - substr_count($what, "'") // Remove quotes + + substr_count($what, "'''") // Re-add escaped quotes + + ( + substr_count( + str_replace("'''", "'", $what), // Remove escaped quotes + "'" + ) + / 2 // We have two quotes per value + ) + - 1; // But we have one less comma than values + } + + if (strtolower(substr($type, 0, 4) == "enum")) { + $values = str_getcsv($what, ",", "'", "'"); + return (int) max(array_map('strlen', $values)); + } + } + + protected static function getFieldType($what) + { + switch (strtolower($what)) { + case "char": + case "varchar": + case "binary": + case "varbinary": + case "enum": + case "set": + return "string"; + case "text": + case "tinytext": + case "mediumtext": + case "longtext": + case "blob": + case "tinyblob": + case "mediumblob": + case "longblob": + return "blob"; + case "integer": + case "bit": + case "int": + case "smallint": + case "tinyint": + case "mediumint": + case "bigint": + return "int"; + case "decimal": + case "numeric": + case "float": + case "double": + return "real"; + case "date": + case "time": + case "timestamp": + case "year": + case "datetime": + case "null": + case "geometry": + return $what; + default: + return "unknown"; + } + } } } diff --git a/tests/MySqlShimTest.php b/tests/MySqlShimTest.php index 35523cf..928edb4 100644 --- a/tests/MySqlShimTest.php +++ b/tests/MySqlShimTest.php @@ -96,6 +96,21 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase id int AUTO_INCREMENT, one varchar(255), two varchar(255), + three varchar(255), + four varchar(255), + five varchar(255), + six varchar(255), + seven varchar(255), + eight varchar(255), + nine ENUM('one', 'two', '\'three'), + ten SET('one', 'two', '\'three'), + eleven MEDIUMTEXT, + INDEX one_idx (one), + UNIQUE INDEX two_unq (two), + INDEX three_four_idx (three, four), + UNIQUE INDEX four_five_unq (four, five), + INDEX seven_eight_idx (seven, eight), + UNIQUE INDEX seven_eight_unq (seven, eight), PRIMARY KEY (id) );" ); @@ -104,15 +119,23 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_query_insert() { - $this->getConnection("mysql_shim"); - $result = \mysql_query("INSERT INTO testing (one, two) VALUES ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')"); + $this->getConnection("shim_test"); + $result = \mysql_query( + "INSERT INTO + testing (one, two, three, four, five, six, seven, eight) + VALUES + ('1', '1', '1', '1', '1', '1', '1', '1'), + ('2', '2', '2', '2', '2', '2', '2', '2'), + ('3', '3', '3', '3', '3', '3', '3', '3'), + ('4', '4', '4', '4', '4', '4', '4', '4')" + ); $this->assertTrue($result, \mysql_error()); } public function test_mysql_query() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_query("SELECT VERSION()"); $this->assertResult($result); @@ -120,7 +143,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_query_nodata() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_query("SET @test = 'foo'"); $this->assertTrue($result); @@ -128,7 +151,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_query_fail() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_query("SELECT VERSION("); $this->assertFalse($result); @@ -136,7 +159,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_unbuffered_query() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_unbuffered_query("SELECT one, two FROM testing LIMIT 4"); $this->assertResult($result); @@ -160,16 +183,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_unbuffered_query_num_rows() { - $this->getConnection("mysql_shim"); - - \mysql_query( - "CREATE TABLE largetest ( - id int AUTO_INCREMENT, - one varchar(255), - two varchar(255), - PRIMARY KEY (id) - );" - ); + $this->getConnection("shim_test"); $result = \mysql_unbuffered_query("SELECT one, two FROM testing"); $this->assertResult($result); @@ -183,16 +197,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase $this->markTestSkipped("PHP < 7.0.0 is required"); } - $conn = $this->getConnection("mysql_shim"); - - \mysql_query( - "CREATE TABLE largetest ( - id int AUTO_INCREMENT, - one varchar(255), - two varchar(255), - PRIMARY KEY (id) - );" - ); + $conn = $this->getConnection("shim_test"); $result = \mysql_unbuffered_query("SELECT one, two FROM testing"); $this->assertResult($result); @@ -211,28 +216,170 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase */ public function test_mysql_unbuffered_query_close() { - $conn = $this->getConnection("mysql_shim"); - - \mysql_query( - "CREATE TABLE largetest ( - id int AUTO_INCREMENT, - one varchar(255), - two varchar(255), - PRIMARY KEY (id) - );" - ); - + $conn = $this->getConnection("shim_test"); $result = \mysql_unbuffered_query("SELECT one, two FROM testing"); $this->assertResult($result); \mysql_close($conn); } + public function test_mysql_db_query() + { + $this->getConnection(); + $result = \mysql_db_query("shim_test", "SELECT DATABASE()"); + $this->assertResult($result); + $this->assertEquals("shim_test", \mysql_fetch_row($result)[0]); + $result = \mysql_db_query("mysql", "SELECT DATABASE()"); + $this->assertResult($result); + $this->assertEquals("mysql", \mysql_fetch_row($result)[0]); + } + + public function test_mysql_db_query_fail() + { + $this->getConnection(); + $result = \mysql_db_query("nonexistent", "SELECT DATABASE()"); + $this->assertFalse($result); + } + + public function test_mysql_list_dbs() + { + $this->getConnection(); + $result = \mysql_list_dbs(); + $this->assertResult($result); + while ($row = mysql_fetch_assoc($result)) { + $this->assertArrayHasKey("Database", $row); + } + } + + public function test_mysql_list_tables() + { + $this->getConnection(); + $result = \mysql_list_tables("mysql"); + $this->assertResult($result); + while ($row = mysql_fetch_assoc($result)) { + $this->assertArrayHasKey("Tables_in_mysql", $row); + } + } + + public function test_mysql_list_tables_fail() + { + $this->getConnection(); + $result = \mysql_list_tables("nonexistent"); + $this->assertFalse($result); + } + + public function test_mysql_list_fields() + { + $this->getConnection(); + $result = \mysql_list_fields("shim_test", "testing"); + $this->assertResult($result); + + $this->assertEquals("testing", \mysql_field_table($result, 0)); + $this->assertEquals("id", \mysql_field_name($result, 0)); + $this->assertEquals("int", \mysql_field_type($result, 0)); + $this->assertEquals(11, \mysql_field_len($result, 0)); + $this->assertEquals("not_null primary_key auto_increment", \mysql_field_flags($result, 0)); + + $this->assertEquals("testing", \mysql_field_table($result, 1)); + $this->assertEquals("one", \mysql_field_name($result, 1)); + $this->assertEquals("string", \mysql_field_type($result, 1)); + $this->assertEquals(255, \mysql_field_len($result, 1)); + $this->assertEquals("multiple_key", \mysql_field_flags($result, 1)); + + $this->assertEquals("testing", \mysql_field_table($result, 2)); + $this->assertEquals("two", \mysql_field_name($result, 2)); + $this->assertEquals("string", \mysql_field_type($result, 2)); + $this->assertEquals(255, \mysql_field_len($result, 2)); + $this->assertEquals("unique_key", \mysql_field_flags($result, 2)); + + $this->assertEquals("testing", \mysql_field_table($result, 3)); + $this->assertEquals("three", \mysql_field_name($result, 3)); + $this->assertEquals("string", \mysql_field_type($result, 3)); + $this->assertEquals(255, \mysql_field_len($result, 3)); + $this->assertEquals("multiple_key", \mysql_field_flags($result, 3)); + + $this->assertEquals("testing", \mysql_field_table($result, 4)); + $this->assertEquals("four", \mysql_field_name($result, 4)); + $this->assertEquals("string", \mysql_field_type($result, 4)); + $this->assertEquals(255, \mysql_field_len($result, 4)); + $this->assertEquals("multiple_key", \mysql_field_flags($result, 4)); + + $this->assertEquals("testing", \mysql_field_table($result, 5)); + $this->assertEquals("five", \mysql_field_name($result, 5)); + $this->assertEquals("string", \mysql_field_type($result, 5)); + $this->assertEquals(255, \mysql_field_len($result, 5)); + $this->assertEmpty(\mysql_field_flags($result, 5)); + + $this->assertEquals("testing", \mysql_field_table($result, 6)); + $this->assertEquals("six", \mysql_field_name($result, 6)); + $this->assertEquals("string", \mysql_field_type($result, 6)); + $this->assertEquals(255, \mysql_field_len($result, 6)); + $this->assertEmpty(\mysql_field_flags($result, 6)); + + $this->assertEquals("testing", \mysql_field_table($result, 7)); + $this->assertEquals("seven", \mysql_field_name($result, 7)); + $this->assertEquals("string", \mysql_field_type($result, 7)); + $this->assertEquals(255, \mysql_field_len($result, 7)); + $this->assertEquals("multiple_key", \mysql_field_flags($result, 7)); + + $this->assertEquals("testing", \mysql_field_table($result, 8)); + $this->assertEquals("eight", \mysql_field_name($result, 8)); + $this->assertEquals("string", \mysql_field_type($result, 8)); + $this->assertEquals(255, \mysql_field_len($result, 8)); + $this->assertEmpty(\mysql_field_flags($result, 8)); + + $this->assertEquals("testing", \mysql_field_table($result, 9)); + $this->assertEquals("nine", \mysql_field_name($result, 9)); + $this->assertEquals("string", \mysql_field_type($result, 9)); + $this->assertEquals(6, \mysql_field_len($result, 9)); + $this->assertEquals("enum", \mysql_field_flags($result, 9)); + + $this->assertEquals("testing", \mysql_field_table($result, 11)); + $this->assertEquals("eleven", \mysql_field_name($result, 11)); + $this->assertEquals("blob", \mysql_field_type($result, 11)); + $this->assertEquals(16777215, \mysql_field_len($result, 11)); + $this->assertEquals("blob", \mysql_field_flags($result, 11)); + } + + /** + * @expectedException \PHPUnit_Framework_Error_Warning + * @expectedExceptionMessageRegExp /^mysql_field_name\(\): Field 999 is invalid for MySQL result index .*$/ + */ + public function test_mysql_list_fields_fail() + { + $this->getConnection(); + $result = \mysql_list_fields("shim_test", "testing"); + $this->assertResult($result); + + \mysql_field_name($result, 999); + } + + public function test_mysql_num_fields() + { + $this->getConnection('shim_test'); + $result = \mysql_query("SELECT one, two FROM testing LIMIT 1"); + $this->assertResult($result); + + $this->assertEquals(2, \mysql_num_fields($result)); + } + + /** + * @expectedException \PHPUnit_Framework_Error_Warning + * @expectedExceptionMessageRegExp /^mysql_num_fields\(\) expects parameter 1 to be resource, boolean given$/ + */ + public function test_mysql_num_fields_fail() + { + $this->getConnection('shim_test'); + $result = \mysql_query("SELECT one, two FROM nonexistent"); + + \mysql_num_fields($result); + } + /** * @dataProvider mysql_fetch_DataProvider */ public function test_mysql_fetch($function, $results) { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_query("SELECT one, two FROM testing"); $this->assertResult($result); @@ -250,7 +397,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_num_rows() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); $result = \mysql_query("SELECT * FROM testing"); $this->assertResult($result); @@ -259,13 +406,13 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase public function test_mysql_affected_rows() { - $this->getConnection("mysql_shim"); + $this->getConnection("shim_test"); - $result = \mysql_query("UPDATE testing SET one = one + 1, two = two + 1 ORDER BY one DESC LIMIT 4"); + $result = \mysql_query("UPDATE testing SET one = one + 1000, two = two + 1000 ORDER BY one DESC LIMIT 4"); $this->assertTrue($result); $this->assertEquals(4, \mysql_affected_rows()); - $result = \mysql_query("UPDATE testing SET one = one - 1, two = two - 1 ORDER BY one DESC LIMIT 4"); - $this->assertTrue($result); + $result = \mysql_query("UPDATE testing SET one = one - 1000, two = two - 1000 ORDER BY one DESC LIMIT 4"); + $this->assertTrue($result, \mysql_error()); $this->assertEquals(4, \mysql_affected_rows()); } @@ -313,7 +460,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase } fwrite(STDERR, "=> Running Docker Container: "); - static::$container = exec($docker . ' run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -P -d mysql/mysql-server'); + static::$container = exec($docker . ' run -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -P -d mysql/mysql-server:5.7'); if (empty(static::$container)) { static::markTestSkipped("Unable to start docker container"); @@ -432,7 +579,7 @@ class MySqlShimTest extends \PHPUnit_Framework_TestCase $this->assertConnection($mysql); if ($db !== null) { - $this->assertTrue(\mysql_select_db('shim_test')); + $this->assertTrue(\mysql_select_db($db)); } return $mysql; |