xref: /PHP-8.0/ext/oci8/tests/lob_029.phpt (revision 26dfce7f)
1--TEST--
2reading/writing BFILE LOBs
3--SKIPIF--
4<?php
5$target_dbs = array('oracledb' => true, 'timesten' => false);  // test runs on these DBs
6require(__DIR__.'/skipif.inc');
7ob_start();
8phpinfo(INFO_MODULES);
9$phpinfo = ob_get_clean();
10if (preg_match('/Compile-time ORACLE_HOME/', $phpinfo) !== 1) {
11    // Assume building PHP with an ORACLE_HOME means the tested DB is on the same machine as PHP
12    die("skip this test won't work with remote Oracle");
13}
14if (substr(PHP_OS, 0, 3) == 'WIN') die("skip Test script not ported to Windows");
15?>
16--FILE--
17<?php
18
19require(__DIR__.'/connect.inc');
20
21$realdirname = "/tmp";  // Use /tmp because a local dir can give ORA-22288 depending on perms
22$realfilename1 = "oci8bfiletest1.txt";
23$fullname1 = $realdirname."/".$realfilename1;
24$realfilename2 = "oci8bfiletest2.txt";
25$fullname2 = $realdirname."/".$realfilename2;
26$realfilename3 = "oci8bfiletest3.txt";
27$fullname3 = $realdirname."/".$realfilename3;
28
29// Setup
30$s = oci_parse($c, "drop table FileTest");
31@oci_execute($s);
32
33$s = oci_parse($c, "drop directory TestDir");
34@oci_execute($s);
35
36$s = oci_parse($c, "create directory TestDir as '$realdirname'");
37oci_execute($s);
38
39file_put_contents($fullname1, 'Some text in the bfile 1');
40file_put_contents($fullname2, 'Some text in the bfile 2');
41file_put_contents($fullname3, 'Some text in the bfile 3');
42
43$s = oci_parse($c, "create table FileTest (FileNum number, FileDesc varchar2(30), Image bfile)");
44oci_execute($s);
45
46$s = oci_parse($c, "insert into FileTest (FileNum, FileDesc, Image) values (1, 'Description 1', bfilename('TESTDIR', '$realfilename1'))");
47oci_execute($s);
48
49$s = oci_parse($c, "insert into FileTest (FileNum, FileDesc, Image) values (2, 'Description 2', bfilename('TESTDIR', '$realfilename2'))");
50oci_execute($s);
51
52$s = oci_parse($c, "insert into FileTest (FileNum, FileDesc, Image) values (3, 'Description 3', bfilename('TESTDIR', '$realfilename3'))");
53oci_execute($s);
54
55// Run tests
56
57echo "Test 1. Check how many rows in the table\n";
58
59$s = oci_parse($c, "select count(*) numrows from FileTest");
60oci_execute($s);
61oci_fetch_all($s, $res);
62var_dump($res);
63
64echo "Test 2\n";
65$s = oci_parse($c, "select * from FileTest order by FileNum");
66oci_execute($s);
67oci_fetch_all($s, $res);
68var_dump($res);
69
70echo "Test 3\n";
71$d = oci_new_descriptor($c, OCI_D_FILE);
72
73$s = oci_parse($c, "insert into FileTest (FileNum, FileDesc, Image) values (2, 'Description 2', bfilename('TESTDIR', '$realfilename1')) returning Image into :im");
74oci_bind_by_name($s, ":im", $d, -1, OCI_B_BFILE);
75oci_execute($s);
76
77$r = $d->read(40);
78var_dump($r);
79
80unlink($fullname1);
81unlink($fullname2);
82unlink($fullname3);
83
84$s = oci_parse($c, "drop table FileTest");
85oci_execute($s);
86
87$s = oci_parse($c, "drop directory TestDir");
88oci_execute($s);
89
90echo "Done\n";
91?>
92--EXPECT--
93Test 1. Check how many rows in the table
94array(1) {
95  ["NUMROWS"]=>
96  array(1) {
97    [0]=>
98    string(1) "3"
99  }
100}
101Test 2
102array(3) {
103  ["FILENUM"]=>
104  array(3) {
105    [0]=>
106    string(1) "1"
107    [1]=>
108    string(1) "2"
109    [2]=>
110    string(1) "3"
111  }
112  ["FILEDESC"]=>
113  array(3) {
114    [0]=>
115    string(13) "Description 1"
116    [1]=>
117    string(13) "Description 2"
118    [2]=>
119    string(13) "Description 3"
120  }
121  ["IMAGE"]=>
122  array(3) {
123    [0]=>
124    string(24) "Some text in the bfile 1"
125    [1]=>
126    string(24) "Some text in the bfile 2"
127    [2]=>
128    string(24) "Some text in the bfile 3"
129  }
130}
131Test 3
132string(24) "Some text in the bfile 1"
133Done
134