Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


示例程序

数据插入

此示例包含 bindValue 和 bindParam 按位绑定和按名绑定的四种用法。bindValue 与 bindParam 的区别在于 bindParam 只能绑定变量且支持绑定输出型参数。

示例 1

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");
$stmt = $pdo->prepare("INSERT INTO tab_test (name, created) values(?, ?)");
$stmt->bindValue(1, "Tom");
$stmt->bindValue(2, "2000-01-01");
echo $stmt->execute();

示例 2

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");
$stmt = $pdo->prepare("INSERT INTO tab_test (name, created) values(:name, :created)");
$stmt->bindValue("name", "Tom");
$stmt->bindValue("created", "2000-01-01");
echo $stmt->execute();

示例 3

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");
$stmt = $pdo->prepare("INSERT INTO tab_test (name, created) values(?, ?)");
$name = "Tom";
$created = "2000-01-01";
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $created);
echo $stmt->execute();

示例 4

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");
$stmt = $pdo->prepare("INSERT INTO tab_test (name, created) values(:name, :created)");
$name = "Tom";
$created = "2000-01-01";
$stmt->bindParam("name", $name);
$stmt->bindParam("created", $created);
echo $stmt->execute();

数据查询

示例 1

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->query("SELECT id, name, created FROM tab_test");
while($row = $stmt->fetch()) {
    echo "{$row['ID']}, {$row['NAME']}, {$row['BIRTHDAY']}" . PHP_EOL;
}

示例 2

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->query("SELECT id, name, created FROM tab_test");
$stmt->bindColumn(1, $id);
$stmt->bindColumn(2, $name);
$stmt->bindColumn(3, $created);

while($stmt->fetch()) {
    echo "$id, $name, $created" . PHP_EOL;
}

示例 3

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->prepare("SELECT id, name, created FROM tab_test WHERE id = :id");
$stmt->bindValue("id", 1);
$stmt->execute();

while($row = $stmt->fetch()) {
    echo "{$row['ID']}, {$row['NAME']}, {$row['BIRTHDAY']}" . PHP_EOL;
}

存储过程调用

SQL
-- 创建存储过程
CREATE OR REPLACE PROCEDURE proc_add(a int, b int, sum OUT int)
AS 
BEGIN 
	sum := a + b;
END;
PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->prepare("EXEC proc_add(?, ?, ?)");
$stmt->bindValue(1, 100);
$stmt->bindValue(2, 200);
$stmt->bindParam(3, $sum, PDO::PARAM_INPUT_OUTPUT);
$stmt->execute();

echo $sum;//输出 300

存储函数调用

调用函数除了使用如下示例中的 EXEC,还可以使用 SELECT func_name(param1[, ...]) 的方式。

SQL
-- 创建函数
CREATE OR REPLACE FUNCTION func_add(a int, b int)
RETURN int
AS 
BEGIN 
	RETURN a + b;
END;
PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->prepare("EXEC func_add(?, ?)");
$stmt->bindValue(1, 100);
$stmt->bindValue(2, 200);
$stmt->bindParam(3, $sum, PDO::PARAM_INPUT_OUTPUT);
$stmt->execute();

echo $sum;//输出 300

大对象插入

此示例为插入 BLOB 类型数据的示例代码。若需插入 CLOB 类型数据,插入方法与插入字符串的方法一致。

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$lob = fopen("img.png", "rb");

$stmt = $pdo->prepare("INSERT INTO tab_lob (lob) VALUES (:lob)");
$stmt->bindValue(":lob", $lob, PDO::PARAM_LOB);
$stmt->execute();

fclose($lob);

大对象查询

此示例为查询 BLOB 类型数据的的示例代码。若需查询 CLOB 类型数据,方法相同。需要注意的是,如果使用 bindColumn 的方式获取 LOB 数据,在 fetch 时务必使用 PDO::FETCH_BOUND。

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->query("SELECT lob FROM tab_lob WHERE id = 1");
$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

$file = fopen("img_out.png", "wb");

while(!feof($lob))
    fwrite($file, fgets($lob));

fclose($file);

或者

PHP
$pdo = new PDO("xugusql:ip=127.0.0.1;port=5138;db=SYSTEM", "SYSDBA", "SYSDBA");

$stmt = $pdo->query("SELECT lob FROM tab_lob WHERE id = 1");
$row = $stmt->fetch();

$file = fopen("img_out.png", "wb");

while (!feof($row[0]))
    fwrite($file, fgets($row[0]));

fclose($file);