function mysqli_fetch_array_large($offset, $link, $package_size) { /* we are aiming for maximum compression to test MYSQLI_CLIENT_COMPRESS */ $random_char = str_repeat('a', 255); $sql = "INSERT INTO test(label) VALUES "; while (strlen($sql) < $package_size - 259) { $sql .= sprintf("('%s'), ", $random_char); } $sql = substr($sql, 0, -2); $len = strlen($sql); assert($len < $package_size); if (!@mysqli_query($link, $sql)) { if (1153 == mysqli_errno($link) || 2006 == mysqli_errno($link) || stristr(mysqli_error($link), 'max_allowed_packet')) { /* myslqnd - [1153] Got a packet bigger than 'max_allowed_packet' bytes libmysql -[2006] MySQL server has gone away */ return false; } printf("[%03d + 1] len = %d, [%d] %s\n", $offset, $len, mysqli_errno($link), mysqli_error($link)); return false; } /* buffered result set - let's hope we do not run into PHP memory limit... */ if (!($res = mysqli_query($link, "SELECT id, label FROM test"))) { printf("[%03d + 2] len = %d, [%d] %s\n", $offset, $len, mysqli_errno($link), mysqli_error($link)); return false; } while ($row = mysqli_fetch_assoc($res)) { if ($row['label'] != $random_char) { printf("[%03d + 3] Wrong results - expecting '%s' got '%s', len = %d, [%d] %s\n", $offset, $random_char, $row['label'], $len, mysqli_errno($link), mysqli_error($link)); return false; } } mysqli_free_result($res); if (!($stmt = mysqli_prepare($link, "SELECT id, label FROM test"))) { printf("[%03d + 4] len = %d, [%d] %s\n", $offset, $len, mysqli_errno($link), mysqli_error($link)); return false; } /* unbuffered result set */ if (!mysqli_stmt_execute($stmt)) { printf("[%03d + 5] len = %d, [%d] %s, [%d] %s\n", $offset, $len, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), mysqli_errno($link), mysqli_error($link)); return false; } $id = $label = NULL; if (!mysqli_stmt_bind_result($stmt, $id, $label)) { printf("[%03d + 6] len = %d, [%d] %s, [%d] %s\n", $offset, $len, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), mysqli_errno($link), mysqli_error($link)); return false; } while (mysqli_stmt_fetch($stmt)) { if ($label != $random_char) { printf("[%03d + 7] Wrong results - expecting '%s' got '%s', len = %d, [%d] %s\n", $offset, $random_char, $label, $len, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } } mysqli_stmt_free_result($stmt); mysqli_stmt_close($stmt); return true; }
function bind_twice($link, $engine, $sql_type1, $sql_type2, $bind_type1, $bind_type2, $bind_value1, $bind_value2, $offset) { if (!mysqli_query($link, "DROP TABLE IF EXISTS test_mysqli_stmt_bind_param_type_juggling_table_1")) { printf("[%03d + 1] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } mysqli_autocommit($link, true); $sql = sprintf("CREATE TABLE test_mysqli_stmt_bind_param_type_juggling_table_1(col1 %s, col2 %s) ENGINE=%s", $sql_type1, $sql_type2, $engine); if (!mysqli_query($link, $sql)) { printf("[%03d + 2] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!($stmt = mysqli_stmt_init($link))) { printf("[%03d + 3] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_bind_param_type_juggling_table_1(col1, col2) VALUES (?, ?)")) { printf("[%03d + 4] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_bind_param($stmt, $bind_type1 . $bind_type2, $bind_value1, $bind_value1)) { printf("[%03d + 5] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%03d + 6] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_bind_param($stmt, $bind_type1 . $bind_type2, $bind_value1, $bind_value2)) { printf("[%03d + 7] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%03d + 8] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } mysqli_stmt_close($stmt); if (!($res = mysqli_query($link, "SELECT col1, col2 FROM test_mysqli_stmt_bind_param_type_juggling_table_1"))) { printf("[%03d + 9] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (2 !== ($tmp = mysqli_num_rows($res))) { printf("[%03d + 10] Expecting 2 rows, got %d rows [%d] %s\n", $offset, $tmp, mysqli_errno($link), mysqli_error($link)); } $row = mysqli_fetch_assoc($res); if ($row['col1'] != $bind_value1 || $row['col2'] != $bind_value1) { printf("[%03d + 11] Expecting col1 = %s, col2 = %s got col1 = %s, col2 = %s - [%d] %s\n", $offset, $bind_value1, $bind_value1, $row['col1'], $row['col2'], mysqli_errno($link), mysqli_error($link)); return false; } $row = mysqli_fetch_assoc($res); if ($row['col1'] != $bind_value1 || $row['col2'] != $bind_value2) { printf("[%03d + 12] Expecting col1 = %s, col2 = %s got col1 = %s, col2 = %s - [%d] %s\n", $offset, $bind_value1, $bind_value2, $row['col1'], $row['col2'], mysqli_errno($link), mysqli_error($link)); return false; } mysqli_free_result($res); return true; }
function mysqli_update($db, $sql) { $stmt = call_user_func_array('mysqli_interpolate', func_get_args()); if (!mysqli_stmt_execute($stmt)) { throw new mysqli_sql_exception(mysqli_stmt_error($stmt), mysqli_stmt_errno($stmt)); } $affected = mysqli_stmt_affected_rows($stmt); mysqli_stmt_close($stmt); return (int) $affected; }
function func_test_mysqli_stmt_param_count_table_1_mysqli_stmt_param_count($stmt, $query, $expected, $offset) { if (!mysqli_stmt_prepare($stmt, $query)) { printf("[%03d] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_error($stmt)); return false; } if ($expected !== ($tmp = mysqli_stmt_param_count($stmt))) { printf("[%03d] Expecting %s/%d, got %s/%d\n", $offset + 3, gettype($expected), $expected, gettype($tmp), $tmp); } return true; }
function test_format($link, $format, $from, $order_by, $expected, $offset) { if (!($stmt = mysqli_stmt_init($link))) { printf("[%03d] Cannot create PS, [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if ($order_by) { $sql = sprintf('SELECT %s AS _format FROM %s ORDER BY %s', $format, $from, $order_by); } else { $sql = sprintf('SELECT %s AS _format FROM %s', $format, $from); } if (!mysqli_stmt_prepare($stmt, $sql)) { printf("[%03d] Cannot prepare PS, [%d] %s\n", $offset + 1, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%03d] Cannot execute PS, [%d] %s\n", $offset + 2, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_store_result($stmt)) { printf("[%03d] Cannot store result set, [%d] %s\n", $offset + 3, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!is_array($expected)) { $result = null; if (!mysqli_stmt_bind_result($stmt, $result)) { printf("[%03d] Cannot bind result, [%d] %s\n", $offset + 4, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_fetch($stmt)) { printf("[%03d] Cannot fetch result,, [%d] %s\n", $offset + 5, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if ($result !== $expected) { printf("[%03d] Expecting %s/%s got %s/%s with %s - %s.\n", $offset + 6, gettype($expected), $expected, gettype($result), $result, $format, $sql); } } else { $order_by_col = $result = null; if (!mysqli_stmt_bind_result($stmt, $order_by_col, $result)) { printf("[%03d] Cannot bind result, [%d] %s\n", $offset + 7, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } reset($expected); while ((list($k, $v) = each($expected)) && mysqli_stmt_fetch($stmt)) { if ($result !== $v) { printf("[%03d] Row %d - expecting %s/%s got %s/%s [%s] with %s - %s.\n", $offset + 8, $k, gettype($v), $v, gettype($result), $result, $order_by_col, $format, $sql); } } } mysqli_stmt_free_result($stmt); mysqli_stmt_close($stmt); return true; }
function mysqli_interpolate($db, string $sql, ...$args) : mysqli_stmt { $argn = count($args); $stmt = mysqli_prepare($db, $sql); if ($stmt === false) { throw new mysqli_sql_exception(mysqli_error($db), mysqli_errno($db)); } if ($argn) { $syms = str_repeat('s', $argn); if (false === mysqli_stmt_bind_param($stmt, $syms, ...$args)) { throw new mysqli_sql_exception(mysqli_stmt_error($stmt), mysqli_stmt_errno($stmt)); } } return $stmt; }
function zerofill($offset, $link, $datatype, $insert = 1) { mysqli_query($link, 'ALTER TABLE test_mysqli_stmt_bind_result_zerofill_table_1 DROP zero'); $sql = sprintf('ALTER TABLE test_mysqli_stmt_bind_result_zerofill_table_1 ADD zero %s UNSIGNED ZEROFILL', $datatype); if (!mysqli_query($link, $sql)) { // no worries - server might not support it return true; } if (!mysqli_query($link, sprintf('UPDATE test_mysqli_stmt_bind_result_zerofill_table_1 SET zero = %s', $insert))) { printf("[%03d] UPDATE failed, [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!($stmt = mysqli_prepare($link, 'SELECT zero FROM test_mysqli_stmt_bind_result_zerofill_table_1 LIMIT 1'))) { printf("[%03d] SELECT failed, [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } $result = null; if (!mysqli_stmt_bind_result($stmt, $result)) { printf("[%03d] Bind failed, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt)) { printf("[%03d] Execute or fetch failed, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } $res = mysqli_stmt_result_metadata($stmt); $meta = mysqli_fetch_fields($res); mysqli_stmt_free_result($stmt); $meta = $meta[0]; $length = $meta->length; if ($length > strlen($insert)) { $expected = str_repeat('0', $length - strlen($insert)); $expected .= $insert; if ($expected !== $result) { printf("[%03d] Expecting '%s' got '%s'\n", $offset, $expected, $result); return false; } } else { if ($length <= 1) { printf("[%03d] Length reported is too small to run test\n", $offset); return false; } } return true; }
function func_test_mysqli_stmt_num_rows($stmt, $query, $expected, $offset) { if (!mysqli_stmt_prepare($stmt, $query)) { printf("[%03d] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%03d] [%d] %s\n", $offset + 1, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_store_result($stmt)) { printf("[%03d] [%d] %s\n", $offset + 2, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if ($expected !== ($tmp = mysqli_stmt_num_rows($stmt))) { printf("[%03d] Expecting %s/%d, got %s/%d\n", $offset + 3, gettype($expected), $expected, gettype($tmp), $tmp); } mysqli_stmt_free_result($stmt); return true; }
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_stmt_bind_param_call_user_func_table_1 WHERE id = ?')) { printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $id = 1; $params = array(0 => 'i', 1 => &$id); if (!call_user_func_array(array($stmt, 'bind_param'), $params)) { printf("[047] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_stmt_execute($stmt)) { printf("[048] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt)); } mysqli_stmt_close($stmt); if (!($stmt = mysqli_stmt_init($link))) { printf("[049] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test_mysqli_stmt_bind_param_call_user_func_table_1 WHERE id = ?')) { printf("[050] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $types = 'i'; $id = 1; $params = array(0 => $stmt, 1 => 'i', 2 => &$id); if (!call_user_func_array('mysqli_stmt_bind_param', $params)) { printf("[051] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_stmt_execute($stmt)) { printf("[052] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt)); } print "done!"; error_reporting(0); $test_table_name = 'test_mysqli_stmt_bind_param_call_user_func_table_1'; require_once "clean_table.inc";
if (mysqli_real_query($link, 'CREATE PROCEDURE p(IN ver_in VARCHAR(25), OUT ver_out VARCHAR(25)) BEGIN SELECT ver_in INTO ver_out; END;')) { if (!($stmt = mysqli_prepare($link, 'CALL p(?, ?)'))) { printf("[005] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } $ver_in = 'myversion'; $ver_out = ''; if (!mysqli_stmt_bind_param($stmt, 'ss', $ver_in, $ver_out)) { printf("[006] Cannot bind parameter, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_stmt_execute($stmt)) { printf("[007] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } printf("[008] More results: %s\n", mysqli_more_results($link) ? "yes" : "no"); printf("[009] Next results: %s\n", mysqli_next_result($link) ? "yes" : "no"); if (!mysqli_stmt_bind_result($stmt, $ver_out) || !mysqli_stmt_fetch($stmt)) { printf("[010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if ("myversion" !== $ver_out) { printf("[011] Results seem wrong got '%s'\n", $ver_out); } if (!mysqli_stmt_close($stmt)) { printf("[012] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!($res = $link->query("SELECT 1"))) { printf("[013] [%d] %s\n", $link->errno, $link->error); } } else { printf("[004] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); } mysqli_close($link); print "done!";
if (!($stmt_buf = mysqli_stmt_init($link_buf))) { printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } if (!mysqli_stmt_prepare($stmt_buf, "SELECT id, label FROM test_mysqli_stmt_store_result_table_1 ORDER BY id") || !mysqli_stmt_execute($stmt_buf)) { printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt_buf), mysqli_stmt_error($stmt_buf)); } $id = $label = $id_buf = $label_buf = null; if (!mysqli_stmt_bind_result($stmt, $id, $label)) { printf("[012] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_stmt_bind_result($stmt_buf, $id_buf, $label_buf)) { printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt_buf), mysqli_stmt_error($stmt_buf)); } while (mysqli_stmt_fetch($stmt)) { if (!mysqli_stmt_fetch($stmt_buf)) { printf("[014] Unbuffered statement indicates more rows than buffered, [%d] %s\n", mysqli_stmt_errno($stmt_buf), mysqli_stmt_error($stmt_buf)); } if ($id !== $id_buf) { printf("[015] unbuffered '%s'/%s, buffered '%s'/%s\n", $id, gettype($id), $id_buf, gettype($id_buf)); } if ($label !== $label_buf) { printf("[016] unbuffered '%s'/%s, buffered '%s'/%s\n", $label, gettype($label), $label_buf, gettype($label_buf)); } } mysqli_stmt_close($stmt); mysqli_stmt_close($stmt_buf); mysqli_close($link); mysqli_close($link_buf); print "done!"; error_reporting(0); $test_table_name = 'test_mysqli_stmt_store_result_table_1';
if (!mysqli_stmt_execute($stmt_ins)) { printf("[008 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_ins), mysqli_stmt_error($stmt_ins)); break; } $sql = sprintf("SELECT id, BIN(bit_value) AS _bin, bit_value, bit_value + 0 AS _bit_value0, bit_null FROM test WHERE id = %s", $value); if (!mysqli_stmt_prepare($stmt_sel, $sql) || !mysqli_stmt_execute($stmt_sel)) { printf("[009 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel)); break; } $row = array('id' => -1, '_bin' => -1, 'bit_value' => -1, '_bit_value0' => -1, 'bit_null' => -1); if (!mysqli_stmt_bind_result($stmt_sel, $row['id'], $row['_bin'], $row['bit_value'], $row['_bit_value0'], $row['bit_null'])) { printf("[010 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel)); break; } if (!($ret = mysqli_stmt_fetch($stmt_sel))) { printf("[011 - %d] mysqli_stmt_fetch() has failed for %d bits - ret = %s/%s, [%d] %s, [%d] %s\n", $bits, $bits, gettype($ret), $ret, mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel), mysqli_errno($link_sel), mysqli_errno($link_sel)); break; } if ($value != $row['id'] || $bin != $row['_bin'] && $bin2 != $row['_bin']) { debug_zval_dump($row); printf("[012 - %d] Insert of %s in BIT(%d) column might have failed. id = %s, bin = %s (%s/%s)\n", $bits, $value, $bits, $row['id'], $row['_bin'], $bin, $bin2); break; } if ($value != $row['bit_value']) { debug_zval_dump($row); printf("[013 - %d] Expecting %s got %s\n", $bits, $value, $row['bit_value']); break; } if (null !== $row['bit_null']) { debug_zval_dump($row); printf("[014 - %d] Expecting null got %s/%s\n", $bits, gettype($row['bit_value']), $row['bit_value']);
public function executeNonQuery($sql, $argv = NULL) { //Logger::trace("MysqlDao.executeNonQuery executed", LOG_LEVEL_NOTICE); $affected = 0; // 校验参数有效性 $lowstr = strtolower($sql); if (strtolower(substr($lowstr, 0, 6)) === "select") { echo "Invalid query SQL statement."; } //echo $sql; // 创建数据库连接(如果需要) $connected = $this->connected(); $conn = $connected ? $this->conn : $this->connect(FALSE); // 将默认字符集设置为utf8 mysqli_query($conn, "set names 'utf8'"); mysqli_query($conn, "set character set 'utf8'"); // 执行SQL语句 $stmt = mysqli_prepare($conn, $sql); if (mysqli_errno($conn)) { $errno = mysqli_errno($conn); $error = "MYSQL ERROR #" . $errno . " : " . mysqli_error($conn); echo $error; } // 根据参数的个数动态生成参数绑定语句 if (isset($argv) && count($argv) > 0) { $bind_param_cmd = "mysqli_stmt_bind_param(\$stmt, "; $paramstr = ""; $bindstr = ""; $holdstr = ""; $i = 0; foreach ($argv as $arg) { $paramstr .= "\$invar{$i}, "; $bindstr .= "\$invar{$i} = \$argv[{$i}]; "; $holdstr .= "s"; $i++; } $bind_param_cmd = "mysqli_stmt_bind_param(\$stmt, \"{$holdstr}\", " . substr($paramstr, 0, strlen($paramstr) - 2) . "); "; $bind_param_cmd .= $bindstr; eval($bind_param_cmd); //将字符串中的变量代入 } // 执行SQL语句 mysqli_stmt_execute($stmt); if (mysqli_stmt_errno($stmt)) { $errno = mysqli_stmt_errno($stmt); $error = "MYSQL ERROR #" . $errno . " : " . mysqli_stmt_error($stmt); echo $error; } $this->insert_id = mysqli_stmt_insert_id($stmt); //数据库操作数据id //echo $this->insert_id; $affected = mysqli_stmt_affected_rows($stmt); mysqli_stmt_close($stmt); // 关闭数据库连接(如果需要) if (!$connected) { $this->disconnect($conn); } return $affected; }
public function executeQueryA($sql, $argv = NULL, $pagesize = 0, $pageno = 0) { //Logger::trace("MysqlDao.executeQuery executed", LOG_LEVEL_NOTICE); if ($pagesize < 0) { $pagesize = 0; } if ($pageno < 0) { $pageno = 0; } $lowstr = strtolower($sql); if (!(strtolower(substr($lowstr, 0, 6)) === "select")) { throw new DaoException("Invalid query SQL statement."); } $pos = strpos($lowstr, "from"); if (!strpos($lowstr, "from")) { //Logger::trace("Invalid query SQL statement.", LOG_LEVEL_ERROR); //Logger::debug("sql = $sql, argv = $argv"); throw new DaoException("Invalid query SQL statement."); } $colstr = substr($lowstr, 6, $pos - 6); $pos = 0; $colcount = 0; while (!($pos === false)) { $pos = strpos($colstr, ",", $pos + 1); $colcount++; } $connected = $this->connected(); $conn = $connected ? $this->conn : $this->connect(FALSE); mysqli_query($conn, "set names 'utf8'"); $allrow = array(); $stmt = mysqli_prepare($conn, $sql); if (mysqli_errno($conn)) { $errno = mysqli_errno($conn); $error = "MYSQL ERROR #" . $errno . " : " . mysqli_error($conn); throw new DaoException($error, $errno); } //Logger::trace("sql = " . $sql, LOG_LEVEL_VERBOSE); if (isset($argv) && count($argv) > 0) { $bind_param_cmd = "mysqli_stmt_bind_param(\$stmt, "; $paramstr = ""; $bindstr = ""; $holdstr = ""; $i = 0; foreach ($argv as $arg) { $paramstr .= "\$invar{$i}, "; $bindstr .= "\$invar{$i} = \$argv[{$i}]; "; $holdstr .= "s"; $i++; } $bind_param_cmd = "mysqli_stmt_bind_param(\$stmt, \"{$holdstr}\", " . substr($paramstr, 0, strlen($paramstr) - 2) . "); "; $bind_param_cmd .= $bindstr; //Logger::trace("bind parameter: " . $bind_param_cmd, LOG_LEVEL_VERBOSE); eval($bind_param_cmd); } mysqli_stmt_execute($stmt); if (mysqli_stmt_errno($stmt)) { $errno = mysqli_stmt_errno($stmt); $error = "MYSQL ERROR #" . $errno . " : " . mysqli_stmt_error($stmt); //Logger::trace($error, LOG_LEVEL_ERROR); //Logger::debug("sql = $sql ". ($argv)); throw new DaoException($error, $errno); } //��ý���Ԫ��� // /*&����� ��j���� �Խ����ֶ�Ϊ����*/ $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields[0] = $stmt; $count = 1; while ($field = mysqli_fetch_field($data)) { $fields[$count] =& $out[$field->name]; $count++; } call_user_func_array(mysqli_stmt_bind_result, $fields); //���� mysqli_stmt_store_result($stmt); //��ҳ if ($pagesize > 0) { mysqli_stmt_data_seek($stmt, $pagesize * $pageno); } $cnt = 1; while (mysqli_stmt_fetch($stmt)) { /*���$row���ø�ֵֻ�����һ���¼������ �������ѭ�������ݵĸ�ֵ */ foreach ($out as $key => $value) { $row_tmb[$key] = $value; } $allrow[] = $row_tmb; if ($pagesize > 0) { if (++$cnt > $pagesize) { break; } } } mysqli_stmt_close($stmt); if (!$connected) { $this->disconnect($conn); } return $allrow; }
function func_mysqli_stmt_get_result($link, $engine, $bind_type, $sql_type, $bind_value, $offset, $type_hint = null) { if (!mysqli_query($link, "DROP TABLE IF EXISTS test_mysqli_stmt_get_result_types_table_1")) { printf("[%04d] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_query($link, sprintf("CREATE TABLE test_mysqli_stmt_get_result_types_table_1(id INT, label %s, PRIMARY KEY(id)) ENGINE = %s", $sql_type, $engine))) { // don't bail - column type might not be supported by the server, ignore this return false; } if (!($stmt = mysqli_stmt_init($link))) { printf("[%04d] [%d] %s\n", $offset + 1, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_stmt_prepare($stmt, "INSERT INTO test_mysqli_stmt_get_result_types_table_1(id, label) VALUES (?, ?)")) { printf("[%04d] [%d] %s\n", $offset + 2, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } $id = null; if (!mysqli_stmt_bind_param($stmt, "i" . $bind_type, $id, $bind_value)) { printf("[%04d] [%d] %s\n", $offset + 3, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } for ($id = 1; $id < 4; $id++) { if (!mysqli_stmt_execute($stmt)) { printf("[%04d] [%d] %s\n", $offset + 3 + $id, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } } mysqli_stmt_close($stmt); $stmt = mysqli_stmt_init($link); if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test_mysqli_stmt_get_result_types_table_1")) { printf("[%04d] [%d] %s\n", $offset + 7, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%04d] [%d] %s\n", $offset + 8, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } $result = mysqli_stmt_result_metadata($stmt); if (!($res = mysqli_stmt_get_result($stmt))) { printf("[%04d] [%d] %s\n", $offset + 9, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } $num = 0; $fields = mysqli_fetch_fields($result); while ($row = mysqli_fetch_assoc($res)) { $bind_res =& $row['label']; if (!gettype($bind_res) == 'unicode') { if ($bind_res !== $bind_value && (!$type_hint || $type_hint !== gettype($bind_res))) { printf("[%04d] [%d] Expecting %s/'%s' [type hint = %s], got %s/'%s'\n", $offset + 10, $num, gettype($bind_value), $bind_value, $type_hint, gettype($bind_res), $bind_res); mysqli_free_result($res); mysqli_stmt_close($stmt); return false; } } $num++; } if ($num != 3) { printf("[%04d] [%d] %s, expecting 3 results, got only %d results\n", $offset + 11, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), $num); mysqli_free_result($res); mysqli_stmt_close($stmt); return false; } mysqli_free_result($res); mysqli_stmt_close($stmt); return true; }
function func_mysqli_stmt_get_result_geom($link, $engine, $sql_type, $bind_value, $offset) { if (!mysqli_query($link, "DROP TABLE IF EXISTS test_mysqli_stmt_get_result_geom_table_1")) { printf("[%04d] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_query($link, sprintf("CREATE TABLE test_mysqli_stmt_get_result_geom_table_1(id INT, label %s, PRIMARY KEY(id)) ENGINE = %s", $sql_type, $engine))) { // don't bail - column type might not be supported by the server, ignore this return false; } for ($id = 1; $id < 4; $id++) { $sql = sprintf("INSERT INTO test_mysqli_stmt_get_result_geom_table_1(id, label) VALUES (%d, %s)", $id, $bind_value); if (!mysqli_query($link, $sql)) { printf("[%04d] [%d] %s\n", $offset + 2 + $id, mysqli_errno($link), mysqli_error($link)); } } if (!($stmt = mysqli_stmt_init($link))) { printf("[%04d] [%d] %s\n", $offset + 6, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test_mysqli_stmt_get_result_geom_table_1")) { printf("[%04d] [%d] %s\n", $offset + 7, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%04d] [%d] %s\n", $offset + 8, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } if (!($res = mysqli_stmt_get_result($stmt))) { printf("[%04d] [%d] %s\n", $offset + 9, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); mysqli_stmt_close($stmt); return false; } $result = mysqli_stmt_result_metadata($stmt); $fields = mysqli_fetch_fields($result); if ($fields[1]->type != MYSQLI_TYPE_GEOMETRY) { printf("[%04d] [%d] %s wrong type %d\n", $offset + 10, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), $fields[1]->type); } $num = 0; while ($row = mysqli_fetch_assoc($res)) { $bind_res =& $row['label']; if (!($stmt2 = mysqli_stmt_init($link))) { printf("[%04d] [%d] %s\n", $offset + 11, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_stmt_prepare($stmt2, "INSERT INTO test_mysqli_stmt_get_result_geom_table_1(id, label) VALUES (?, ?)")) { printf("[%04d] [%d] %s\n", $offset + 12, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2)); return false; } $id = $row['id'] + 10; if (!mysqli_stmt_bind_param($stmt2, "is", $id, $bind_res)) { printf("[%04d] [%d] %s\n", $offset + 13, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2)); return false; } if (!mysqli_stmt_execute($stmt2)) { printf("[%04d] [%d] %s\n", $offset + 14, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2)); return false; } mysqli_stmt_close($stmt2); if (!($res_normal = mysqli_query($link, sprintf("SELECT id, label FROM test_mysqli_stmt_get_result_geom_table_1 WHERE id = %d", $row['id'] + 10)))) { printf("[%04d] [%d] %s\n", $offset + 15, mysqli_errno($link), mysqli_error($link)); return false; } if (!($row_normal = mysqli_fetch_assoc($res_normal))) { printf("[%04d] [%d] %s\n", $offset + 16, mysqli_errno($link), mysqli_error($link)); return false; } if ($row_normal['label'] != $bind_res) { printf("[%04d] PS and non-PS return different data.\n", $offset + 17); return false; } mysqli_free_result($res_normal); $num++; } if ($num != 3) { printf("[%04d] [%d] %s, expecting 3 results, got only %d results\n", $offset + 18, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), $num); mysqli_free_result($res); mysqli_stmt_close($stmt); return false; } mysqli_free_result($res); mysqli_stmt_close($stmt); return true; }
<?php session_start(); // Establish connection to database require_once 'soluMySQLConnect.php'; $firstName = $_POST['firstname']; $lastName = $_POST['lastname']; $userName = $_POST['username']; $filteredUserName = preg_replace("/[^a-zA-Z0-9]+/", "", $userName); $password = $_POST['password']; $filteredPassword = preg_replace("/[^a-zA-Z0-9]+/", "", $password); $encrypted_password = md5($password); // Redirect back to the specified page or go to the homepage if not specified. $return_page = $_GET['next'] ?: '/index.php'; $statement = mysqli_prepare($dbc, "INSERT INTO accounts (First_Name, Last_Name, Username, Password) VALUES (?,?,?,?)"); mysqli_stmt_bind_param($statement, 'ssss', $firstName, $lastName, $userName, $encrypted_password); mysqli_stmt_execute($statement); if (mysqli_stmt_errno($statement)) { die('Error: ' . mysqli_connect_errno() . mysqli_connect_error() . PHP_EOL); } else { echo 'Account has been created!<br>Redirecting back to home...'; $_SESSION['loggedIn'] = true; $_SESSION['username'] = $userName; header("refresh: 0; {$return_page}"); } mysqli_stmt_close($statement); mysqli_close($dbc);
protected function _set_stmt_error($state = null, $mode = PDO::ERRMODE_SILENT, $func = '') { if ($state === null) { $state = mysqli_stmt_sqlstate($this->_result); } $this->_set_error(mysqli_stmt_errno($this->_result), mysqli_stmt_error($this->_result), $state, $mode, $func); }
printf("%s\n", $var); } printf("\nObject variables:\n"); $variables = array_keys(get_object_vars($stmt)); foreach ($variables as $k => $var) { printf("%s\n", $var); } printf("\nMagic, magic properties:\n"); assert(mysqli_stmt_affected_rows($stmt) === $stmt->affected_rows); printf("stmt->affected_rows = '%s'\n", $stmt->affected_rows); if (!$stmt->prepare("INSERT INTO test_mysqli_class_mysqli_stmt_interface_table_1(id, label) VALUES (100, 'z')") || !$stmt->execute()) { printf("[001] [%d] %s\n", $stmt->errno, $stmt->error); } assert(mysqli_stmt_affected_rows($stmt) === $stmt->affected_rows); printf("stmt->affected_rows = '%s'\n", $stmt->affected_rows); assert(mysqli_stmt_errno($stmt) === $stmt->errno); printf("stmt->errno = '%s'\n", $stmt->errno); assert(mysqli_stmt_error($stmt) === $stmt->error); printf("stmt->error = '%s'\n", $stmt->error); assert(mysqli_stmt_error_list($stmt) === $stmt->error_list); var_dump("stmt->error = ", $stmt->error_list); assert(mysqli_stmt_field_count($stmt) === $stmt->field_count); printf("stmt->field_count = '%s'\n", $stmt->field_count); assert($stmt->id > 0); printf("stmt->id = '%s'\n", $stmt->id); assert(mysqli_stmt_insert_id($stmt) === $stmt->insert_id); printf("stmt->insert_id = '%s'\n", $stmt->insert_id); assert(mysqli_stmt_num_rows($stmt) === $stmt->num_rows); printf("stmt->num_rows = '%s'\n", $stmt->num_rows); assert(mysqli_stmt_param_count($stmt) === $stmt->param_count); printf("stmt->param_count = '%s'\n", $stmt->param_count);
} mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter); $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps']; mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter); mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter); mysqli_get_client_stats_assert_eq('result_set_queries', $info, $expected, $test_counter); mysqli_get_client_stats_assert_eq('ps_unbuffered_sets', $info, $expected, $test_counter); mysqli_get_client_stats_assert_eq('rows_buffered_from_client_ps', $info, $expected, $test_counter); mysqli_stmt_free_result($stmt); print "Testing unbuffered Prepared Statements... - fetching all but one\n"; if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test') || !mysqli_stmt_execute($stmt)) { printf("[%03d] prepare/execute failed, [%d] %s\n", ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $id = $label = null; if (!mysqli_stmt_bind_result($stmt, $id, $label)) { printf("[%03d] bind_result failed, [%d] %s\n", ++$test_counter, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } for ($i = 0; $i < $num_rows - 1; $i++) { mysqli_stmt_fetch($stmt); } $expected['rows_fetched_from_server_ps'] = (string) ($expected['rows_fetched_from_server_ps'] + $num_rows - 1); $expected['rows_fetched_from_client_ps_unbuffered'] = (string) ($expected['rows_fetched_from_client_ps_unbuffered'] + $num_rows - 1); $expected['result_set_queries'] = (string) ($expected['result_set_queries'] + 1); $expected['ps_unbuffered_sets'] = (string) ($expected['ps_unbuffered_sets'] + 1); if (!is_array($info = mysqli_get_client_stats()) || empty($info)) { printf("[%03d] Expecting array/any_non_empty, got %s/%s\n", ++$test_counter, gettype($info), $info); } mysqli_get_client_stats_assert_gt('bytes_received_real_data_ps', $info, $expected, $test_counter); $expected['bytes_received_real_data_ps'] = $info['bytes_received_real_data_ps']; mysqli_get_client_stats_assert_eq('rows_fetched_from_server_ps', $info, $expected, $test_counter); mysqli_get_client_stats_assert_eq('rows_fetched_from_client_ps_unbuffered', $info, $expected, $test_counter);
} if (!is_object($res = mysqli_stmt_get_result($stmt)) || 'mysqli_result' != get_class($res)) { printf("[004] Expecting object/mysqli_result got %s/%s, [%d] %s\n", gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (3 !== $res->num_rows) { printf("[005] Expecting 3 rows, got %s/%s rows\n", gettype($res->num_rows), $res->num_rows); } if (2 !== $res->field_count) { printf("[006] Expecting 2 fields, got %s/%s rows\n", gettype($res->field_count), $res->field_count); } if (0 !== $res->current_field) { printf("[006] Expecting offset 0, got %s/%s rows\n", gettype($res->current_field), $res->current_field); } for ($i = 2; $i > 0; $i--) { if (!$res->data_seek($i)) { printf("[007] Cannot seek to position %d, [%d] %s\n", $i, mysqli_stmt_errno($stmt), $stmt->error); } $row = $res->fetch_array(MYSQLI_BOTH); if ($row[0] !== $row['id'] || $row[0] !== $i + 1) { printf("[008] Record looks wrong, dumping data\n"); var_dump($row); } else { unset($row[0]); unset($row['id']); } if ($row[1] !== $row['label']) { printf("[009] Record looks wrong, dumping data\n"); var_dump($row); } else { unset($row[1]); unset($row['label']);
function testStatement($offset, $link, $sql, $expected_lib, $expected_mysqlnd, $check_mysqlnd, $compare) { if (!($stmt = mysqli_stmt_init($link))) { printf("[%04d - %s] [%d] %s\n", $offset, $sql, mysqli_errno($link), mysqli_error($link)); return false; } if (!@mysqli_stmt_prepare($stmt, $sql)) { /* Not all server versions will support all statements */ /* Failing to prepare is OK */ return true; } if (empty($expected_lib) && false !== $res) { printf("[%04d - %s] No metadata expected\n", $offset + 1, $sql); return false; } else { if (!empty($expected_lib) && false == $res) { printf("[%04d - %s] Metadata expected\n", $offset + 2, $sql); return false; } } if (!empty($expected_lib)) { if (!is_object($res)) { printf("[%04d - %s] [%d] %s\n", $offset + 3, $sql, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (get_class($res) != 'mysqli_result') { printf("[%04d - %s] Expecting object/mysqli_result got object/%s\n", $offset + 4, $sql, get_class($res)); return false; } $meta = array('num_fields' => mysqli_num_fields($res), 'fetch_field' => mysqli_fetch_field($res), 'fetch_field_direct0' => mysqli_fetch_field_direct($res, 0), 'fetch_field_direct1' => @mysqli_fetch_field_direct($res, 1), 'fetch_fields' => count(mysqli_fetch_fields($res)), 'field_count' => $res->field_count, 'field_seek-1' => @mysqli_field_seek($res, -1), 'field_seek0' => mysqli_field_seek($res, 0), 'field_tell' => mysqli_field_tell($res)); if (is_object($meta['fetch_field'])) { $meta['fetch_field']->charsetnr = 'ignore'; $meta['fetch_field']->flags = 'ignore'; } if (is_object($meta['fetch_field_direct0'])) { $meta['fetch_field_direct0']->charsetnr = 'ignore'; $meta['fetch_field_direct0']->flags = 'ignore'; } if (is_object($meta['fetch_field_direct1'])) { $meta['fetch_field_direct1']->charsetnr = 'ignore'; $meta['fetch_field_direct1']->flags = 'ignore'; } mysqli_free_result($res); if ($meta != $expected_lib) { printf("[%04d - %s] Metadata differs from expected values\n", $offset + 5, $sql); var_dump($meta); var_dump($expected_lib); return false; } } if (function_exists('mysqli_stmt_get_result')) { /* mysqlnd only */ if (!mysqli_stmt_execute($stmt)) { printf("[%04d - %s] [%d] %s\n", $offset + 6, $sql, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } $res = mysqli_stmt_get_result($stmt); if (false === $res && !empty($expected_mysqlnd)) { printf("[%04d - %s] Expecting resultset [%d] %s\n", $offset + 7, $sql, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } else { if (empty($expected_mysqlnd) && false !== $res) { printf("[%04d - %s] Unexpected resultset [%d] %s\n", $offset + 8, $sql, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } } if (!is_object($res)) { printf("[%04d - %s] [%d] %s\n", $offset + 9, $sql, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if ('mysqli_result' != get_class($res)) { printf("[%04d - %s] Expecting object/mysqli_result got object/%s\n", $offset + 10, $sql, get_class($res)); return false; } $meta_res = array('num_fields' => mysqli_num_fields($res), 'fetch_field' => mysqli_fetch_field($res), 'fetch_field_direct0' => mysqli_fetch_field_direct($res, 0), 'fetch_field_direct1' => @mysqli_fetch_field_direct($res, 1), 'fetch_fields' => count(mysqli_fetch_fields($res)), 'field_count' => mysqli_field_count($link), 'field_seek-1' => @mysqli_field_seek($res, -1), 'field_seek0' => mysqli_field_seek($res, 0), 'field_tell' => mysqli_field_tell($res)); if (is_object($meta_res['fetch_field'])) { $meta_res['fetch_field']->charsetnr = 'ignore'; $meta_res['fetch_field']->flags = 'ignore'; } if (is_object($meta_res['fetch_field_direct0'])) { $meta_res['fetch_field_direct0']->charsetnr = 'ignore'; $meta_res['fetch_field_direct0']->flags = 'ignore'; } if (is_object($meta_res['fetch_field_direct1'])) { $meta_res['fetch_field_direct1']->charsetnr = 'ignore'; $meta_res['fetch_field_direct1']->flags = 'ignore'; } mysqli_free_result($res); if ($check_mysqlnd && $meta_res != $expected_mysqlnd) { printf("[%04d - %s] Metadata differs from expected\n", $offset + 11, $sql); var_dump($meta_res); var_dump($expected_mysqlnd); } else { if ($meta_res['field_count'] < 1) { printf("[%04d - %s] Metadata seems wrong, no fields?\n", $offset + 12, $sql); var_dump($meta_res); var_dump(mysqli_fetch_assoc($res)); } } if ($compare && $meta_res != $meta) { printf("[%04d - %s] Metadata returned by mysqli_stmt_result_metadata() and mysqli_stmt_get_result() differ\n", $offset + 13, $sql); var_dump($meta_res); var_dump($meta); } } mysqli_stmt_close($stmt); return true; }
function func_mysqli_stmt_bind_datatype($link, $engine, $bind_type, $sql_type, $bind_value, $offset, $alternative = null) { if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) { printf("[%03d] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_query($link, sprintf("CREATE TABLE test(id INT NOT NULL, label %s, PRIMARY KEY(id)) ENGINE = %s", $sql_type, $engine))) { // don't bail - it might be that the server does not support the data type return false; } if (!($stmt = mysqli_stmt_init($link))) { printf("[%03d] [%d] %s\n", $offset + 1, mysqli_errno($link), mysqli_error($link)); return false; } if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUE (?, ?)")) { printf("[%03d] [%d] %s\n", $offset + 2, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } $id = 1; if (!mysqli_stmt_bind_param($stmt, "i" . $bind_type, $id, $bind_value)) { printf("[%03d] [%d] %s\n", $offset + 3, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } if (!mysqli_stmt_execute($stmt)) { printf("[%03d] [%d] %s\n", $offset + 4, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); return false; } mysqli_stmt_close($stmt); if (!($res = mysqli_query($link, "SELECT id, label FROM test"))) { printf("[%03d] [%d] %s\n", $offset + 5, mysqli_errno($link), mysqli_error($link)); return false; } if (!($row = mysqli_fetch_assoc($res))) { printf("[%03d] [%d] %s\n", $offset + 5, mysqli_errno($link), mysqli_error($link)); return false; } if ($alternative) { if ($row['id'] != $id || $row['label'] != $bind_value && $row['label'] != $alternative) { printf("[%03d] Testing '%s', '%s': expecting '%s'/'%s' (%s), got '%s'/'%s'\n", $offset + 6, $bind_type, $sql_type, $id, $bind_value, gettype($bind_value), $row['id'], $row['label']); return false; } } else { if ($row['id'] != $id || $row['label'] != $bind_value) { printf("[%03d] Testing '%s', '%s': expecting '%s'/'%s', got '%s'/'%s'\n", $offset + 6, $bind_type, $sql_type, $id, $bind_value, $row['id'], $row['label']); return false; } } mysqli_free_result($res); return true; }
} if (($tmp = $res_meta->field_count) !== $num_fields) { printf("[014] Expecting int/%d got %s/%s\n", $num_fields, gettype($tmp), $tmp); } $fields_res_meta = mysqli_fetch_fields($res_meta); if (($tmp = count($fields_res_meta)) !== $num_fields) { printf("[015] Expecting int/%d got %s/%s\n", $num_fields, gettype($tmp), $tmp); } if ($fields_res_meta != $fields) { printf("[016] Prepared Statement metadata differs from normal metadata, dumping\n"); var_dump($fields_res_meta); var_dump($fields); } if (function_exists('mysqli_stmt_get_result') && $stmt->prepare('EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2') && $stmt->execute()) { if (!($res_stmt = mysqli_stmt_get_result($stmt))) { printf("[017] Cannot fetch result from PS [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (($tmp = mysqli_num_rows($res_stmt)) !== $num_rows) { printf("[018] Expecting int/%d got %s/%s\n", $num_rows, gettype($tmp), $tmp); } if (mysqli_stmt_num_rows($stmt) !== 0) { printf("[019] Expecting int/0 got %s/%s\n", gettype($tmp), $tmp); } if (($tmp = mysqli_stmt_field_count($stmt)) !== $num_fields) { printf("[020] Expecting int/%d got %s/%s\n", $num_fields, gettype($tmp), $tmp); } if (($tmp = $res_stmt->field_count) !== $num_fields) { printf("[021] Expecting int/%d got %s/%s\n", $num_fields, gettype($tmp), $tmp); } $fields_stmt = mysqli_fetch_fields($res_stmt); if (($tmp = count($fields_stmt)) !== $num_fields) {
printf("[019] Expecting object/mysqli_result got %s/%s, [%d] %s\n", gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $id = $label = null; if (!mysqli_stmt_bind_result($stmt, $id, $label)) { printf("[020] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $row = mysqli_fetch_assoc($res); if (NULL !== $id || NULL !== $label) { printf("[021] Bound variables should not have been set\n"); } mysqli_free_result($res); mysqli_stmt_close($stmt); if (!($stmt = mysqli_stmt_init($link)) || !mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id ASC LIMIT 2") || !mysqli_stmt_execute($stmt)) { printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!is_object($res = mysqli_stmt_get_result($stmt)) || 'mysqli_result' != get_class($res)) { printf("[023] Expecting object/mysqli_result got %s/%s, [%d] %s\n", gettype($res), $res, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!in_array($res->type, array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT))) { printf("[024] Unknown result set type %s\n", $res->type); } if ($res->type !== MYSQLI_STORE_RESULT) { printf("[025] Expecting int/%d got %s/%s", MYSQLI_STORE_RESULT, gettype($res->type), $res->type); } mysqli_free_result($res); mysqli_stmt_close($stmt); mysqli_close($link); if (NULL !== ($res = mysqli_stmt_get_result($stmt))) { printf("[022] Expecting NULL got %s/%s\n", gettype($res), $res); } print "done!";
if (mysqli_stmt_prepare($stmt, "SELECT i_do_not_exist_believe_me FROM test_mysqli_stmt_errno_table_1 ORDER BY id")) { printf("[005] Statement should have failed!\n"); } // set after error server? if (0 === ($tmp = mysqli_stmt_errno($stmt))) { printf("[006] Expecting int/any non zero, got %s/%s\n", gettype($tmp), $tmp); } if (!mysqli_stmt_prepare($stmt, "SELECT id FROM test_mysqli_stmt_errno_table_1 ORDER BY id")) { printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } // reset after error & success if (0 != ($tmp = mysqli_stmt_errno($stmt))) { printf("[008] Expecting zero, got %s/%s\n", gettype($tmp), $tmp); } mysqli_kill($link, mysqli_thread_id($link)); if (true === ($tmp = mysqli_stmt_execute($stmt))) { printf("[009] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); } // set after client error if (0 === ($tmp = mysqli_stmt_errno($stmt))) { printf("[010] Execting int/any non zero, got %s/%s\n", gettype($tmp), $tmp); } mysqli_stmt_close($stmt); if (NULL !== ($tmp = mysqli_stmt_errno($stmt))) { printf("[011] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); } mysqli_close($link); print "done!"; error_reporting(0); $test_table_name = 'test_mysqli_stmt_errno_table_1'; require_once "clean_table.inc";
} $label = null; if (mysqli_stmt_bind_param($stmt, "s", $label)) { printf("[014] expected error - got ok\n"); } while (mysqli_stmt_fetch($stmt)) { if (1 !== ($tmp = mysqli_stmt_field_count($stmt))) { printf("[015] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp); } } if (!mysqli_stmt_prepare($stmt, 'INSERT INTO test(id) VALUES (100)')) { printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (0 !== ($tmp = mysqli_stmt_field_count($stmt))) { printf("[017] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp); } if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'z' WHERE id = 1") || !mysqli_stmt_execute($stmt)) { printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (0 !== ($tmp = mysqli_stmt_field_count($stmt))) { printf("[019] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp); } mysqli_stmt_close($stmt); if (mysqli_stmt_prepare($stmt, 'SELECT id FROM test')) { printf("[020] Prepare should fail, statement has been closed\n"); } if (!is_null($tmp = mysqli_stmt_field_count($stmt))) { printf("[011] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); } mysqli_close($link); print "done!";
} $link->query("CREATE TABLE test(" . implode(" , ", $str) . ") ENGINE=MyISAM"); if (mysqli_errno($link)) { printf("Failed to create the test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); die(""); } $stmt = $link->prepare("INSERT INTO test VALUES(" . str_repeat("?, ", $cols - 1) . "?)"); var_dump($stmt->id); $s = str_repeat("a", 2 << 12); $eval_str = "\$stmt->bind_param(\"" . str_repeat("s", $cols) . "\", "; for ($i = 1; $i < $cols; $i++) { $eval_str .= "\$s,"; } $eval_str .= "\$s"; $eval_str .= ");"; eval($eval_str); printf("executing\n"); if (!$stmt->execute()) { printf("failed"); printf("Failed to execute: [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } else { var_dump(true); } mysqli_stmt_close($stmt); if (!$link->query("SET GLOBAL max_allowed_packet={$old_max_allowed_packet}")) { if (1227 != mysqli_errno($link)) { printf("Failed to set max_allowed_packet the test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } } mysqli_close($link); print "done!";
if (!($stmt = mysqli_stmt_init($link))) { printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2")) { printf("[010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_stmt_execute($stmt)) { printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } $id = NULL; $label = NULL; if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label))) { printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); } if (true !== ($tmp = mysqli_stmt_fetch($stmt))) { printf("[013] Expecting boolean/true, got %s/%s, [%d] %s\n", gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); } if (!mysqli_kill($link, mysqli_thread_id($link))) { printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } if (true !== ($tmp = mysqli_stmt_fetch($stmt))) { printf("[015] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp); } mysqli_stmt_close($stmt); if (NULL !== ($tmp = mysqli_stmt_fetch($stmt))) { printf("[016] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); } mysqli_close($link); /* Check that the function alias exists. It's a deprecated function, but we have not announce the removal so far, therefore we need to check for it */ if (!is_null($tmp = @mysqli_stmt_fetch())) {
break 4; } if (!mysqli_stmt_store_result($stmt)) { $errors[] = sprintf("stmt_store_result() failed (converted code: %s)\n", $flag_original_code ? 'no' : 'yes'); break 4; } $times[$num_rows . ' rows: ' . $num_runs . 'x ' . $type . ' overall'] = microtime(true); for ($i = 0; $i < $num_runs; $i++) { $pos = $num_runs - $i - 1; $start = microtime(true); mysqli_stmt_data_seek($stmt, $pos); $times[$num_rows . ' rows: ' . $num_runs . 'x ' . $type . ' data_seek()'] += microtime(true) - $start; if (!mysqli_stmt_fetch($stmt)) { $errors[] = sprintf("fetch() for %dth of %d rows failed (%s) (converted code: %s): [%d] %s\n", $pos, $num_rows, $type, $flag_original_code ? 'no' : 'yes', mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); break 5; } if ($id != $pos) { $errors[] = sprintf("seek() + fetch() for %dth of %d rows did not work (%s) (converted code: %s): [%d] %s\n", $pos, $num_rows, $type, $flag_original_code ? 'no' : 'yes', mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); var_dump($id); var_dump($pos); break 5; } } $times[$num_rows . ' rows: ' . $num_runs . 'x ' . $type . ' overall'] = microtime(true) - $times[$num_rows . ' rows: ' . $num_runs . 'x ' . $type . ' overall']; mysqli_stmt_close($stmt); } } } // end foreach types mysqli_close($link); } while (false);