php操作达梦数据库示例代码(包括绑定变量,存储过程调用,clob类型操作等)

database

最近花了不少时间把项目数据库从oracle迁移到达梦8,迁移过程中碰上了不少问题,后面有时间我整理一下心得。

今天先发一下php使用dm_pdo操作达梦数据库的示例代码,里面包括了常规的绑定变量查询,存储过程调用,clob类型操作等。

使用的是达梦提供的pdo_dm驱动,相关配置信息请参考达梦的官方帮助文档(达梦8安装时自带)

ini_set("display_errors","On");

ini_set("log_errors", 1);

ini_set("error_log", "/usr/local/apache2/logs/dm_error.log");

error_reporting(E_ALL)

//获取变量值字符串

function strHt($var)

{

return print_r($var, true);

}

/*

function xlog(string $lv, string $format, ...$args)

{

$log = "%s %s:%s %s" . PHP_EOL;

$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);

return sprintf($log, $lv, trim($backtrace[0]["file"]), $backtrace[0]["line"], sprintf($format, ...$args));

}

echo xlog("info", "我是一条日志%s", ...["呀"]);

————————————————

版权声明:本文为CSDN博主「安木1991」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_42900065/article/details/83509723

*/

function mySubFile($str)

{

if ($str == "")

{

return "";

}

return strstr($str, "inc_chk");

}

//日志打印函数

function dbgLogHt(string $format, ...$args)

{

$log = "%s:%s %s";

$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);

#$strHt = sprintf($log, "[dbg]", trim($backtrace[1]["file"]), $backtrace[1]["line"], sprintf($format, ...$args));

#($strHt, 0);

error_log(sprintf($log, trim($backtrace[0]["file"]), $backtrace[0]["line"], sprintf($format, ...$args)));

//输出调用堆栈 方便调试

error_log(sprintf("from %s:%s %s:%s %s:%s %s:%s %s:%s %s:%s %s:%s %s:%s" . PHP_EOL,

mySubFile($backtrace[1]["file"]), $backtrace[1]["line"], mySubFile($backtrace[2]["file"]), $backtrace[2]["line"],

mySubFile($backtrace[3]["file"]), $backtrace[3]["line"], mySubFile($backtrace[4]["file"]), $backtrace[4]["line"],

mySubFile($backtrace[5]["file"]), $backtrace[5]["line"], mySubFile($backtrace[6]["file"]), $backtrace[6]["line"],

mySubFile($backtrace[7]["file"]), $backtrace[7]["line"], mySubFile($backtrace[8]["file"]), $backtrace[8]["line"])

);

# error_log(strHt($backtrace));

}

function testPdo()

{

try {

dbgLogHt("<pre>"); //dm:代表使用达梦pdo驱动

$pdo = new PDO("dm:host=127.0.0.1", "user_hch", "pass:kingstarer");

//设置报错方式为抛出异常

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$rs = $pdo->query("SELECT * FROM V$VERSION WHERE ROWNUM = 1;");

$rs->setFetchMode(PDO::FETCH_ASSOC);

$result_arr = $rs->fetchAll();

error_log(strHt($result_arr));

$arr = []; //测试绑定变量 包括入参和出参

$arr[":iCount"] = "5";

$arr[":rn"] = "hhc";

$strSql = "select :rn rn, table_name from user_tables where rownum < :iCount";

$stmt = $pdo->prepare($strSql);

$stmt->bindParam(":rn", $arr[":rn"]);

$stmt->bindParam(":iCount", $arr[":iCount"]);

$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // $row是一行,使用while依次输出下一行

dbgLogHt("while");

dbgLogHt(strHt($row));

error_log(strHt($row));

}

dbgLogHt("<pre>");

// 测试存储过程调用

$strSql = "begin :ret := f_prod_demo(:num, "UPD", 123, :o_err_code, :o_err_msg, :o_call_stack); end;";

$stmt = $pdo->prepare($strSql);

/*

//用这种 比较简洁 但实际测试发现不行

$arr = [];

$arr[":num"] = "123";

$arr[":ret"] = "o_err_code";

$arr[":o_err_code"] = "o_err_code";

$arr[":o_err_msg"] = "o_err_msg";

$arr[":o_err_msg"] = "o_call_stack";

$stmt->execute($arr);

print_r($arr);

*/

$arr = [];

$arr[":num"] = "123";

$arr[":ret"] = "o_err_code";

$arr[":o_err_code"] = "o_err_code";

$arr[":o_err_msg"] = "o_err_msg";

$arr[":o_err_msg"] = "o_call_stack";

$stmt->bindParam(":num", $arr[":num"]);

$stmt->bindParam(":ret", $arr[":ret"]);

$stmt->bindParam(":o_err_code", $arr[":o_err_code"]);

$stmt->bindParam(":o_err_msg", $arr[":o_err_msg"]);

$stmt->bindParam(":o_call_stack", $arr[":o_call_stack"]);

$stmt->execute();

error_log(strHt($arr));

$stmt->closeCursor();

//测试达梦插入clob数据

$strSql = "INSERT into HCH_TEST values(1, "333")";

$stmt = $pdo->prepare($strSql);

$stmt->execute();

error_log("insert clob ok");

$stmt->closeCursor();

//测试使用绑定变量插入clob类型数据

$strSql = "INSERT into HCH_TEST values(:id, :mess)";

error_log("<prepare>");

$stmt = $pdo->prepare($strSql);

error_log("<prepare ok>");

$arr[":id"] = "123";

$stmt->bindParam(":id", $arr[":id"]);

error_log("<bindParam ok>");

$arr[":mess"] = "123";

$stmt->bindParam(":mess", $arr[":mess"]);

error_log("<bindParam ok>");

$stmt->execute();

error_log("<execute ok>");

$stmt->closeCursor();

error_log("insert clob param ok");

error_log("<pre>");

$pdo = null;

//更多达梦数据库开发经验请参考: https://www.cnblogs.com/kingstarer/

} catch (PDOException $e) {

error_log("Error: " . $e->getMessage());

error_log("<pre>");

//die();

}

//exit(1);

}

网上关于达梦的资料比较少,希望这篇心得能起抛砖引玉的效果。

以上是 php操作达梦数据库示例代码(包括绑定变量,存储过程调用,clob类型操作等) 的全部内容, 来源链接: utcz.com/z/534040.html

回到顶部