<?php
/**
* Storage container for the oauth credentials, both server and consumer side.
* Based on MySQL
*
* @version $Id: OAuthStoreMySQLi.php 64 2009-08-16 19:37:00Z marcw@pobox.com $
* @author Bruno Barberi Gnecco <brunobg@users.sf.net> Based on code by Marc Worrell <marcw@pobox.com>
*
*
* The MIT License
*
* Copyright (c) 2007-2008 Mediamatic Lab
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/*
* Modified from OAuthStoreMySQL to support MySQLi
*/
require_once dirname(__FILE__) . '/OAuthStoreMySQL.php';
class OAuthStoreMySQLi extends OAuthStoreMySQL
{
public function install() {
$sql = file_get_contents(dirname(__FILE__) . '/mysql/mysql.sql');
$ps = explode('#--SPLIT--', $sql);
foreach ($ps as $p)
{
$p = preg_replace('/^\s*#.*$/m', '', $p);
$this->query($p);
$this->sql_errcheck($p);
}
}
/**
* Construct the OAuthStoreMySQLi.
* In the options you have to supply either:
* - server, username, password and database (for a mysqli_connect)
* - conn (for the connection to be used)
*
* @param array options
*/
function __construct ( $options = array() )
{
if (isset($options['conn']))
{
$this->conn = $options['conn'];
}
else
{
if (isset($options['server']))
{
$server = $options['server'];
$username = $options['username'];
if (isset($options['password']))
{
$this->conn = ($GLOBALS["___mysqli_ston"] = mysqli_connect($server, $username, $options['password']));
}
else
{
$this->conn = ($GLOBALS["___mysqli_ston"] = mysqli_connect($server, $username));
}
}
else
{
// Try the default mysql connect
$this->conn = ($GLOBALS["___mysqli_ston"] = mysqli_connect());
}
if ($this->conn === false)
{
throw new OAuthException2('Could not connect to MySQL database: ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
}
if (isset($options['database']))
{
/* TODO: security. mysqli_ doesn't seem to have an escape identifier function.
$escapeddb = mysqli_real_escape_string($options['database']);
if (!((bool)mysqli_query( $this->conn, "USE `$escapeddb`" )))
{
$this->sql_errcheck();
}*/
}
$this->query('set character set utf8');
}
}
/**
* Perform a query, ignore the results
*
* @param string sql
* @param vararg arguments (for sprintf)
*/
protected function query ( $sql )
{
$sql = $this->sql_printf(func_get_args());
if (!($res = mysqli_query( $this->conn, $sql)))
{
$this->sql_errcheck($sql);
}
if (!is_bool($res))
{
((mysqli_free_result($res) || (is_object($res) && (get_class($res) == "mysqli_result"))) ? true : false);
}
}
/**
* Perform a query, ignore the results
*
* @param string sql
* @param vararg arguments (for sprintf)
* @return array
*/
protected function query_all_assoc ( $sql )
{
$sql = $this->sql_printf(func_get_args());
if (!($res = mysqli_query( $this->conn, $sql)))
{
$this->sql_errcheck($sql);
}
$rs = array();
while ($row = mysqli_fetch_assoc($res))
{
$rs[] = $row;
}
((mysqli_free_result($res) || (is_object($res) && (get_class($res) == "mysqli_result"))) ? true : false);
return $rs;
}
/**
* Perform a query, return the first row
*
* @param string sql
* @param vararg arguments (for sprintf)
* @return array
*/
protected function query_row_assoc ( $sql )
{
$sql = $this->sql_printf(func_get_args());
if (!($res = mysqli_query( $this->conn, $sql)))
{
$this->sql_errcheck($sql);
}
if ($row = mysqli_fetch_assoc($res))
{
$rs = $row;
}
else
{
$rs = false;
}
((mysqli_free_result($res) || (is_object($res) && (get_class($res) == "mysqli_result"))) ? true : false);
return $rs;
}
/**
* Perform a query, return the first row
*
* @param string sql
* @param vararg arguments (for sprintf)
* @return array
*/
protected function query_row ( $sql )
{
$sql = $this->sql_printf(func_get_args());
if (!($res = mysqli_query( $this->conn, $sql)))
{
$this->sql_errcheck($sql);
}
if ($row = mysqli_fetch_array($res))
{
$rs = $row;
}
else
{
$rs = false;
}
((mysqli_free_result($res) || (is_object($res) && (get_class($res) == "mysqli_result"))) ? true : false);
return $rs;
}
/**
* Perform a query, return the first column of the first row
*
* @param string sql
* @param vararg arguments (for sprintf)
* @return mixed
*/
protected function query_one ( $sql )
{
$sql = $this->sql_printf(func_get_args());
if (!($res = mysqli_query( $this->conn, $sql)))
{
$this->sql_errcheck($sql);
}
if ($row = mysqli_fetch_assoc($res))
{
$val = array_pop($row);
}
else
{
$val = false;
}
((mysqli_free_result($res) || (is_object($res) && (get_class($res) == "mysqli_result"))) ? true : false);
return $val;
}
/**
* Return the number of rows affected in the last query
*/
protected function query_affected_rows ()
{
return mysqli_affected_rows($this->conn);
}
/**
* Return the id of the last inserted row
*
* @return int
*/
protected function query_insert_id ()
{
return ((is_null($___mysqli_res = mysqli_insert_id($this->conn))) ? false : $___mysqli_res);
}
protected function sql_printf ( $args )
{
$sql = array_shift($args);
if (count($args) == 1 && is_array($args[0]))
{
$args = $args[0];
}
$args = array_map(array($this, 'sql_escape_string'), $args);
return vsprintf($sql, $args);
}
protected function sql_escape_string ( $s )
{
if (is_string($s))
{
return mysqli_real_escape_string( $this->conn, $s);
}
else if (is_null($s))
{
return NULL;
}
else if (is_bool($s))
{
return intval($s);
}
else if (is_int($s) || is_float($s))
{
return $s;
}
else
{
return mysqli_real_escape_string( $this->conn, strval($s));
}
}
protected function sql_errcheck ( $sql )
{
if (((is_object($this->conn)) ? mysqli_errno($this->conn) : (($___mysqli_res = mysqli_connect_errno()) ? $___mysqli_res : false)))
{
$msg = "SQL Error in OAuthStoreMySQL: ".((is_object($this->conn)) ? mysqli_error($this->conn) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false))."\n\n" . $sql;
throw new OAuthException2($msg);
}
}
}
/* vi:set ts=4 sts=4 sw=4 binary noeol: */
?> |