15quote.phpt
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHPT 代码 · 共 274 行
PHPT
274 行
--TEST--DB_driver::quote--INI--error_reporting = 2047--SKIPIF--<?php chdir(dirname(__FILE__)); require_once './skipif.inc'; ?>--FILE--<?phprequire_once './connect.inc';require_once './droptable.inc';/** * Local error callback handler. * * Drops the phptest table, prints out an error message and kills the * process. * * @param object $o PEAR error object automatically passed to this method * @return void * @see PEAR::setErrorHandling() */function pe($o) { global $dbh; $dbh->setErrorHandling(PEAR_ERROR_RETURN); drop_table($dbh, 'pearquote'); die($o->toString());}// DBMS boolean column type simulation...$boolean_col_type = array( 'dbase' => 'Logical', 'fbsql' => 'BOOLEAN', 'ibase' => 'SMALLINT', 'ifx' => 'SMALLINT', 'msql' => 'INTEGER', 'mssql' => 'BIT', 'mysql' => 'TINYINT(1)', 'mysqli' => 'TINYINT(1)', 'oci8' => 'NUMBER(1)', 'odbc' => 'SMALLINT', 'pgsql' => 'BOOLEAN', 'sqlite' => 'INTEGER', 'sybase' => 'TINYINT',);// adjust things for specific DBMS'sif ($dbh->phptype == 'odbc') { if ($dbh->dbsyntax == 'odbc') { $type = $dbh->phptype; } else { $type = $dbh->dbsyntax; }} else { $type = $dbh->phptype;}switch ($type) { case 'access': $decimal = 'SINGLE'; $null = ''; $chr = 'VARCHAR(8)'; $identifier = 'q\ut "dnt'; break; case 'db2': case 'ibase': $decimal = 'DECIMAL(3,1)'; $null = ''; $chr = 'VARCHAR(8)'; $identifier = 'q\ut] "dn[t'; break; case 'ifx': // doing this for ifx to keep certain versions happy $decimal = 'DECIMAL(3,1)'; $null = ''; $chr = 'CHAR(8)'; $identifier = ''; break; case 'msql': $decimal = 'REAL'; $null = ''; $chr = 'CHAR(8)'; $identifier = ''; break; case 'fbsql': case 'oci8': $decimal = 'DECIMAL(3,1)'; $null = ''; $chr = 'VARCHAR(8)'; $identifier = 'q\ut] dn[t'; break; default: $decimal = 'DECIMAL(3,1)'; $null = 'NULL'; $chr = 'VARCHAR(8)'; $identifier = 'q\ut] "dn[t';}$dbh->setErrorHandling(PEAR_ERROR_RETURN);drop_table($dbh, 'pearquote');if ($identifier) { switch ($dbh->phptype) { case 'sybase': $res = $dbh->query('set quoted_identifier on'); if (DB::isError($res) ) { pe($res); } break; default: } $create = $dbh->query(" CREATE TABLE pearquote ( n $decimal $null, s $chr $null, " . $dbh->quoteIdentifier($identifier) . " $decimal $null, b {$boolean_col_type[$dbh->phptype]} $null ) "); if (DB::isError($create) ) { pe($create); } $info = $dbh->tableInfo('pearquote'); if (DB::isError($info) ) { if ($info->code == DB_ERROR_NOT_CAPABLE) { print "Got outcome expected from delimited identifier.\n"; } else { print "tableInfo() failed.\n"; } } else { if ($identifier == $info[2]['name']) { print "Got outcome expected from delimited identifier.\n"; // print "COLUMN NAME IS: {$info[2]['name']}\n"; } else { print "Expected column name: '$identifier' ... "; print "Actual column name: '{$info[2]['name']}'\n"; } }} else { $dbh->query(" CREATE TABLE pearquote ( n $decimal $null, s $chr $null, plainidentifier $decimal $null, b {$boolean_col_type[$dbh->phptype]} $null ) "); print "Got outcome expected from delimited identifier.\n";}$dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'pe');$strings = array( "'", "\"", "\\", "%", "_", "''", "\"\"", "\\\\", "\\'\\'", "\\\"\\\"");$nums = array( 12.3, 15,);$bools = array( TRUE, FALSE,);echo "String escape test: ";foreach ($strings as $s) { $quoted = $dbh->quoteSmart($s); $dbh->query("INSERT INTO pearquote (s) VALUES ($quoted)");}$diff = array_diff($strings, $res = $dbh->getCol("SELECT s FROM pearquote"));if (count($diff) > 0) { echo "FAIL"; print_r($strings); print_r($res);} else { echo "OK";}$dbh->query("DELETE FROM pearquote");echo "\nNumber escape test: ";foreach ($nums as $n) { $quoted = $dbh->quoteSmart($n); $dbh->query("INSERT INTO pearquote (n) VALUES ($quoted)");}$diff = array();$res =& $dbh->getCol('SELECT n FROM pearquote ORDER BY n');foreach ($nums as $key => $val) { if ($val != $res[$key]) { $diff[] = "$val != {$res[$key]}"; }}if (count($diff) > 0) { echo "FAIL\n"; print_r($diff);} else { echo 'OK';}$dbh->query('DELETE FROM pearquote');echo "\nBoolean escape test: ";$i = 1;foreach ($bools as $b) { $quoted = $dbh->quoteSmart($b); $dbh->query("INSERT INTO pearquote (n, b) VALUES ($i, $quoted)"); $i++;}$diff = array();$res =& $dbh->getCol('SELECT b, n FROM pearquote ORDER BY n');foreach ($bools as $key => $val) { if ($val === true) { if ($res[$key] == 1 || $res[$key] == true || substr(strtolower($res[$key]), 0, 1) == 't') { // good } else { $diff[] = "in:true != out:{$res[$key]}"; } } else { if ($res[$key] == 0 || $res[$key] == false || substr(strtolower($res[$key]), 0, 1) == 'f') { // good } else { $diff[] = "in:false != out:{$res[$key]}"; } }}if (count($diff) > 0) { echo "FAIL\n"; print_r($diff);} else { echo "OK\n";}$dbh->setErrorHandling(PEAR_ERROR_RETURN);drop_table($dbh, 'pearquote');?>--EXPECT--Got outcome expected from delimited identifier.String escape test: OKNumber escape test: OKBoolean escape test: OK
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?