您的位置:首页 > 编程语言 > PHP开发

php 使用pdo连接postgresql

2013-01-16 14:57 597 查看
有关pdo的使用可以参考:
http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/08/12/1797753.html
1、连接数据库方法

function _conn($t) {
//static $db;
if (is_null ( $db )) {
global $Config;
$dsn = $Config ['server'] [$t] ['type'] . ":dbname=" . $Config ['server'] [$t] ['dbname'] . ";host=" . $Config ['server'] [$t] ['host'];
//postgresql 的type为pgsql

     //echo $dsn;
try {
$db = new PDO ( $dsn, $Config ['server'] [$t] ['user'], $Config ['server'] [$t] ['passwd'] );
} catch ( PDOException $ex ) {
print_r ( $ex );
return false;
}
}
return $db;

}


2、使用示例

//查询user表用户信息
$sql = sprintf ( "SELECT * FROM %s WHERE passport = '%s' and passwd = '%s';", "user", $passport, sha1 ( $passwd ) );
$info = $db->query ( $sql )->fetch ( PDO::FETCH_ASSOC );
//如果是insert或update语句,不能使用query,可以使用$db->exec($sql);


注意:使用postgresql时,lastInsertId()返回false,无法用

参考解决办法:

function pgsqlLastInsertId($sqlQuery, $pdoObject)
{
// Checks if query is an insert and gets table name
if( preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is", $sqlQuery, $tablename) )
{
// Gets this table's last sequence value
$query = "SELECT currval('" . $tablename[1] . "_id_seq') AS last_value";
$temp_q_id = $pdoObject->prepare($query);//$tablename[1]替换为你的表名
$temp_q_id->execute();
if($temp_q_id)
{
$temp_result = $temp_q_id->fetch(PDO::FETCH_ASSOC);
return ( $temp_result ) ? $temp_result['last_value'] : false;
}
}return false;
}

$pdoObject = new PDO('pgsql:host=localhost;dbname=mydb', 'user', 'pass');
$sql = 'INSERT INTO table (column) VALUES (\'some_value\');';
$result = $pdoObject->prepare($sql);
$result->execute();
//至此,可以成功的取到上一条插入数据的id了。
echo 'Last Insert ID: ' . pgsqlLastInsertId($sql, $pdoObject);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: