3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php /** * SAE Mysql服务 * * 支持主从分离 * * @author Easychen <easychen@gmail.com> * @version $Id$ * @package sae * */ /** * Sae Mysql Class * * <code> * <?php * $mysql = new SaeMysql(); * * $sql = "SELECT * FROM `user` LIMIT 10"; * $data = $mysql->getData( $sql ); * $name = strip_tags( $_REQUEST['name'] ); * $age = intval( $_REQUEST['age'] ); * $sql = "INSERT INTO `user` ( `name` , `age` , `regtime` ) VALUES ( '" . $mysql->escape( $name ) . "' , '" . intval( $age ) . "' , NOW() ) "; * $mysql->runSql( $sql ); * if( $mysql->errno() != 0 ) * { * die( "Error:" . $mysql->errmsg() ); * } * * $mysql->closeDb(); * ?> * </code> * * @package sae * @author EasyChen * */ class SaeMysql { /** * 构造函数 * * @param bool $do_replication 是否支持主从分离,true:支持,false:不支持,默认为true * @return void * @author EasyChen */ function __construct( $do_replication = true ) { $this->port = 3307; $this->host = '.rdc.sae.sina.com.cn'; $this->accesskey = SAE_ACCESSKEY; $this->secretkey = SAE_SECRETKEY; $this->appname = 'app_' . $_SERVER['HTTP_APPNAME']; //set default charset as utf8 $this->charset = 'UTF8'; $this->do_replication = $do_replication; } /** * 设置keys * * 当需要连接其他APP的数据库时使用 * * @param string $akey AccessKey * @param string $skey SecretKey * @return void * @author EasyChen */ public function setAuth( $akey , $skey ) { $this->accesskey = $akey; $this->secretkey = $skey; } /** * 设置Mysql服务器端口 * * 当需要连接其他APP的数据库时使用 * * @param string $port * @return void * @author EasyChen */ public function setPort( $port ) { $this->port = 3307; $this->host = '.rdc.sae.sina.com.cn'; } /** * 设置Appname * * 当需要连接其他APP的数据库时使用 * * @param string $appname * @return void * @author EasyChen */ public function setAppname( $appname ) { $this->appname = 'app_' . $appname; } /** * 设置当前连接的字符集 , 必须在发起连接之前进行设置 * * @param string $charset 字符集,如GBK,GB2312,UTF8 * @return void */ public function setCharset( $charset ) { return $this->set_charset( $charset ); } /** * 同setCharset,向前兼容 * * @param string $charset * @return void * @ignore */ public function set_charset( $charset ) { $this->charset = $charset; } /** * 运行Sql语句,不返回结果集 * * @param string $sql * @return mysqli_result|bool */ public function runSql( $sql ) { return $this->run_sql( $sql ); } /** * 同runSql,向前兼容 * * @param string $sql * @return bool * @author EasyChen * @ignore */ public function run_sql( $sql ) { $this->last_sql = $sql; $dblink = $this->db_write(); if ($dblink === false) { return false; } $ret = mysqli_query( $dblink, $sql ); $this->save_error( $dblink ); return $ret; } /** * 运行Sql,以多维数组方式返回结果集 * * @param string $sql * @return array 成功返回数组,失败时返回false * @author EasyChen */ public function getData( $sql ) { return $this->get_data( $sql ); } /** * 同getData,向前兼容 * * @ignore */ public function get_data( $sql ) { $this->last_sql = $sql; $data = Array(); $i = 0; $dblink = $this->do_replication ? $this->db_read() : $this->db_write(); if ($dblink === false) { return false; } $result = mysqli_query( $dblink , $sql ); $this->save_error( $dblink ); if (is_bool($result)) { return $result; } else { while( $Array = mysqli_fetch_array( $result, MYSQL_ASSOC ) ) { $data[$i++] = $Array; } } mysqli_free_result($result); if( count( $data ) > 0 ) return $data; else return NULL; } /** * 运行Sql,以数组方式返回结果集第一条记录 * * @param string $sql * @return array 成功返回数组,失败时返回false * @author EasyChen */ public function getLine( $sql ) { return $this->get_line( $sql ); } /** * 同getLine,向前兼容 * * @param string $sql * @return array * @author EasyChen * @ignore */ public function get_line( $sql ) { $data = $this->get_data( $sql ); if ($data) { return @reset($data); } else { return false; } } /** * 运行Sql,返回结果集第一条记录的第一个字段值 * * @param string $sql * @return mixxed 成功时返回一个值,失败时返回false * @author EasyChen */ public function getVar( $sql ) { return $this->get_var( $sql ); } /** * 同getVar,向前兼容 * * @param string $sql * @return array * @author EasyChen * @ignore */ public function get_var( $sql ) { $data = $this->get_line( $sql ); if ($data) { return $data[ @reset(@array_keys( $data )) ]; } else { return false; } } /** * 同mysqli_affected_rows函数 * * @return int 成功返回行数,失败时返回-1 * @author Elmer Zhang */ public function affectedRows() { $result = isset($this->db_write) ? mysqli_affected_rows( $this->db_write ) : -1; return $result; } /** * 同mysqli_insert_id函数 * * @return int 成功返回last_id,失败时返回false * @author EasyChen */ public function lastId() { return $this->last_id(); } /** * 同lastId,向前兼容 * * @return int * @author EasyChen * @ignore */ public function last_id() { $result = mysqli_insert_id( $this->db_write( false ) ); return $result; } /** * 关闭数据库连接 * * @return bool * @author EasyChen */ public function closeDb() { return $this->close_db(); } /** * 同closeDb,向前兼容 * * @return bool * @author EasyChen * @ignore */ public function close_db() { if( isset( $this->db_read ) ) @mysqli_close( $this->db_read ); if( isset( $this->db_write ) ) @mysqli_close( $this->db_write ); } /** * 同mysqli_real_escape_string * * @param string $str * @return string * @author EasyChen */ public function escape( $str ) { if( isset($this->db_read) ) { $db = $this->db_read; } elseif( isset($this->db_write) ) { $db = $this->db_write; } else { $db = $this->db_read(); } return mysqli_real_escape_string( $db , $str ); } /** * 返回错误码 * * * @return int * @author EasyChen */ public function errno() { return $this->errno; } /** * 返回错误信息 * * @return string * @author EasyChen */ public function error() { return $this->error; } /** * 返回错误信息,error的别名 * * @return string * @author EasyChen */ public function errmsg() { return $this->error(); } /** * @ignore */ private function connect( $is_master = true ) { if ($this->port == 0) { $this->error = 13048; $this->errno = 'Not Initialized'; return false; } if( $is_master ) $host = 'w' . $this->host; else $host = 'r' . $this->host; $db = mysqli_init(); mysqli_options($db, MYSQLI_OPT_CONNECT_TIMEOUT, 5); if( !mysqli_real_connect( $db, $host , $this->accesskey , $this->secretkey , $this->appname , $this->port ) ) { $this->error = mysqli_connect_error(); $this->errno = mysqli_connect_errno(); return false; } mysqli_set_charset( $db, $this->charset); return $db; } /** * @ignore */ private function db_read() { if( isset( $this->db_read ) && mysqli_ping( $this->db_read ) ) { return $this->db_read; } else { if( !$this->do_replication ) return $this->db_write(); else { $this->db_read = $this->connect( false ); return $this->db_read; } } } /** * @ignore */ private function db_write( $reconnect = true ) { if( isset( $this->db_write ) && ( $reconnect == false || mysqli_ping( $this->db_write ) ) ) { return $this->db_write; } else { $this->db_write = $this->connect( true ); return $this->db_write; } } /** * @ignore */ private function save_error($dblink) { $this->error = mysqli_error($dblink); $this->errno = mysqli_errno($dblink); } private $error; private $errno; private $last_sql; } //Documentation generated on Tue, 25 Feb 2014 21:24:45 +0800 by phpDocumentor 1.4.3 $mysql = new SaeMysql();//sae内部类链接数据 $num = "SELECT * FROM `message` "; $mysql->runSql($num); $no=$mysql->affectedRows();//获取行数 echo $no; printf($no);
Output for 7.0.0 - 7.1.0
Notice: Use of undefined constant SAE_ACCESSKEY - assumed 'SAE_ACCESSKEY' in /in/VS3tJ on line 54 Notice: Use of undefined constant SAE_SECRETKEY - assumed 'SAE_SECRETKEY' in /in/VS3tJ on line 55 Notice: Undefined index: HTTP_APPNAME in /in/VS3tJ on line 56 Fatal error: Uncaught Error: Call to undefined function mysqli_init() in /in/VS3tJ:403 Stack trace: #0 /in/VS3tJ(449): SaeMysql->connect(true) #1 /in/VS3tJ(156): SaeMysql->db_write() #2 /in/VS3tJ(142): SaeMysql->run_sql('SELECT * FROM `...') #3 /in/VS3tJ(479): SaeMysql->runSql('SELECT * FROM `...') #4 {main} thrown in /in/VS3tJ on line 403
Process exited with code 255.
Output for hhvm-3.12.0 - 3.13.2
Notice: Use of undefined constant SAE_ACCESSKEY - assumed 'SAE_ACCESSKEY' in /in/VS3tJ on line 54 Notice: Use of undefined constant SAE_SECRETKEY - assumed 'SAE_SECRETKEY' in /in/VS3tJ on line 55 Notice: Undefined index: HTTP_APPNAME in /in/VS3tJ on line 56 Warning: mysql_connect(): Unknown MySQL server host 'w.rdc.sae.sina.com.cn' (111) Fatal error: Uncaught TypeError: Argument 1 passed to mysqli_affected_rows() must be an instance of mysqli, bool given in /in/VS3tJ:280 Stack trace: #0 /in/VS3tJ(280): mysqli_affected_rows() #1 /in/VS3tJ(480): SaeMysql->affectedRows() #2 {main}
Process exited with code 255.
Output for hhvm-3.10.0
Notice: Use of undefined constant SAE_ACCESSKEY - assumed 'SAE_ACCESSKEY' in /in/VS3tJ on line 54 Notice: Use of undefined constant SAE_SECRETKEY - assumed 'SAE_SECRETKEY' in /in/VS3tJ on line 55 Notice: Undefined index: HTTP_APPNAME in /in/VS3tJ on line 56 Warning: mysql_connect(): Unknown MySQL server host 'w.rdc.sae.sina.com.cn' (111) Catchable fatal error: Argument 1 passed to mysqli_affected_rows() must be an instance of mysqli, bool given in /in/VS3tJ on line 280
Process exited with code 255.
Output for 5.3.0 - 5.6.28
Notice: Use of undefined constant SAE_ACCESSKEY - assumed 'SAE_ACCESSKEY' in /in/VS3tJ on line 54 Notice: Use of undefined constant SAE_SECRETKEY - assumed 'SAE_SECRETKEY' in /in/VS3tJ on line 55 Notice: Undefined index: HTTP_APPNAME in /in/VS3tJ on line 56 Fatal error: Call to undefined function mysqli_init() in /in/VS3tJ on line 403
Process exited with code 255.