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 + -
显示快捷键?