pdf to image converter using c# : Convert word to editable pdf form software SDK dll winforms windows asp.net web forms 201212-ug-php-oracle-188476016-part381

CHAPTER 11
E
XECUTING
SQL S
TATEMENTS
W
ITH
OCI8
This chapter discusses using SQL statements with the PHP OCI8 extension. It covers 
statement execution, the OCI8 functions available, handling transactions, tuning queries, and 
some useful tips and tricks.
SQL Statement Execution Steps
Queries using the OCI8 extension follow a model familiar in the Oracle world: parse, execute 
and fetch. Statements like CREATE and INSERT require only parsing and executing.
The possible steps are:
1. Parse: Prepares a statement for execution. Parsing is really just a light-weight local 
preparatory step, since Oracle’s actual text parse occurs in the database at the execution 
stage. 
2. Bind: An optional step that lets you bind data values, for example, in the WHERE clause, 
for better performance and security. Binding local values into a statement is similar to the 
way you use a %s print format specification in a string. 
3. Define: An optional step allowing you to specify which PHP variables will hold query 
results. This is not commonly used because most scripts use the OCI8 fetch functions to 
return results.
4. Execute: The database processes the statement and buffers any results.
5. Fetch: Gets any query results back from the database.
There is no one-stop function to do all these steps in a single PHP call but it is trivial to create 
one in your application and you can then add custom error handling requirements.
To safeguard from run-away scripts, by default PHP will terminate if a script takes longer 
than 30 seconds. This is set with the php.ini parameter max_execution_time or the 
set_time_limit() function
.
The value is the CPU time used by PHP, so long running SQL 
statements in the database may not get interrupted. You will need to enable resource 
management in the database to overcome this.
Similarly, if you are manipulating large amounts of data, you may need to increase the 
php.ini parameter memory_limit, which caps the amount of memory each PHP process can 
consume.
Query Example
A basic query in OCI8 is:
Script 25: query.php
<?php
147
Convert word to editable pdf form - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
create a pdf form in word; pdf form save in reader
Convert word to editable pdf form - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
change font size in fillable pdf form; adding a signature to a pdf form
Executing SQL Statements With OCI8
$c = oci_pconnect("hr", "welcome", "localhost/XE");
$s = oci_parse($c, "select city, postal_code from locations");
oci_execute($s);
print '<table border="1">';
while ($row = oci_fetch_array($s, OCI_NUM+OCI_RETURN_NULLS)) {
print "<tr>";
foreach ($row as $item)
print "<td>".htmlentities($item)."</td>";
print "</tr>";
}
print "</table>";
?>
The output from the script query.php is:
The htmlentities() function prevents any user data such as '<' from being interpreted as an 
HTML tag. In many cases you will want to use this function's optional ENT_QUOTES parameter. 
You should also use the optional character set parameter, specifying a value that matches the 
character set of your document.
Quoting SQL Statement Text
In PHP, single and double quotes can both be used for strings. Strings with embedded quotes 
can be made by escaping the nested quotes with a backslash, or by using both quoting 
characters. The next example shows single quotes around the city name. To make the query a 
valid PHP string it, therefore, must be enclosed in double quotes:
$q = "select * from locations where city = 'Sydney'";
$s = oci_parse($c, $q);
If you have a query syntax error, echo out the string and verify the quoting is valid for Oracle:
148
Figure 64: Output from 
query.php.
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Create PDF files from both DOC and DOCX formats. Convert multiple pages Word to fillable and editable PDF documents.
adding text fields to pdf; pdf editable fields
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert multiple pages Word to fillable and editable PDF documents in both .NET WinForms and ASP.NET. Convert both DOC and DOCX formats to PDF files.
add text field to pdf acrobat; create a pdf form online
SQL Statement Execution Steps
echo $q;
PHP 5.3 introduced a NOWDOC syntax that is useful for embedding quotes and dollar signs in 
strings, such as this example that queries one of Oracle's administration views V$SQL:
$sql = <<<'END'
select parse_calls, executions
from   v$sql
END;
$s = oci_parse($c, $sql);
. . .
Note the END token must appear in the first column of the script, without any indentation.
Freeing Statements
In long scripts it is recommended to close statements when they are complete:
oci_free_statement($s);
This allows resources to be reused efficiently. For brevity, and because the examples execute 
quickly or the statement resource is closed automatically at the end of function scope, most 
code snippets in this book do not follow this practice.
Oracle Data Types
Each column has a data type, which is associated with a specific storage format. The common 
built-in Oracle data types are:
CHAR
VARCHAR2
NUMBER
DATE
TIMESTAMP
INTERVAL
BLOB
CLOB
BFILE
XMLType
The CHAR, VARCHAR2, NUMBER, DATE, TIMESTAMP and INTERVAL data types are stored 
directly in PHP variables. BLOB, CLOB, and BFILE data types use PHP descriptors and are 
shown in the Using Large Objects in OCI8 chapter. XMLTypes are returned as strings or LOBs, 
as discussed in the Using XML with Oracle and PHP chapter. Oracle's NCHAR, NVARCHAR2, 
and NCLOB types are not supported in the OCI8 extension.
149
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
hardly edit PDF document. Under this situation, you need to convert PDF document to some easily editable files like Word document.
add image to pdf form; best pdf form creator
C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
methods to convert target PDF document to other editable file formats using Visual C# code, such as, PDF to HTML converter assembly, PDF to Word converter
changing font in pdf form; create a pdf form from excel
Executing SQL Statements With OCI8
Fetch Functions
There are a number of OCI8 fetch functions, all documented in the PHP Oracle OCI8 Manual at 
http://php.net/manual/en/book.oci8.phpTable 6 lists the functions.
Table 6: OCI8 fetch functions.
OCI8 Function
Purpose
oci_fetch_all()
Gets all the results at once.
oci_fetch_array()
Gets the next row as an array indexed by an integer or as an 
associative array, depending on your choice.
oci_fetch_assoc()
Gets the next row as an associative array.
oci_fetch_object()
Gets the next row as an object.
oci_fetch_row()
Gets the next row as an integer indexed array.
oci_fetch()
Used with oci_result(), which returns the result of a given 
field. Also used with oci_define_by_name() which presets which 
variable the data will be returned into.
Some of the functions have optional parameters. Refer to the PHP manual for more 
information.
The function commonly used is oci_fetch_array():
$rowarray = oci_fetch_array($statement, $mode);
The mode is optional. Table 7 lists the available modes.
Table 7: oci_fetch_array() options.
Parameter
Purpose
OCI_ASSOC
Return results as an associative array.
OCI_NUM
Return results as a numerically indexed array.
OCI_BOTH
Return results as both associative and numeric arrays. This is 
the default.
OCI_RETURN_NULLS
Return PHP NULL value for NULL data.
OCI_RETURN_LOBS
Return the actual LOB data instead of an OCI-LOB resource.
Modes can be used together by adding or binary-or'ing them together:
$rowarray = oci_fetch_array($s, OCI_NUM + OCI_RETURN_NULLS);
The oci_fetch_assoc() and oci_fetch_row() functions are special cases of 
oci_fetch_array().
Fetching to a Numeric Array
A basic example to fetch results into a numerically indexed PHP array is:
150
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff Convert multiple pages PowerPoint to fillable and editable PDF documents.
create pdf form; create a form in pdf from word
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
C#.NET convert PDF to text, C#.NET convert PDF to images How-to, VB.NET PDF, VB.NET Word, VB.NET Create fillable and editable PDF documents from Excel in Visual
convert word to editable pdf form; pdf create fillable form
Fetch Functions
$s = oci_parse($c, "select city, postal_code from locations");
oci_execute($s);
while ($row = oci_fetch_array($s, OCI_NUM)) {
echo $row[0] . " - " . $row[1] . "<br>\n";
}
The two columns are index 0 and index 1 in the result array. This displays:
Roma - 00989
Venice - 10934
Tokyo - 1689
Hiroshima - 6823
Southlake – 26192
. . .
Some of the fetch functions do not return NULL data by default. This can be tricky when using 
numerically indexed arrays. The result array can appear to have fewer columns than selected, 
and you can’t always tell which column was NULL. Either use associative arrays so the column 
names are directly associated with their values, or specify the OCI_RETURN_NULLS flag:
$row = oci_fetch_array($s, OCI_NUM + OCI_RETURN_NULLS);
Fetching to an Associative Array
Associative array keys are the column names in the case shown when describing the table in 
SQL*Plus:
SQL> describe locations
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LOCATION_ID                               NOT NULL NUMBER(4)
STREET_ADDRESS                                     VARCHAR2(40)
POSTAL_CODE                                        VARCHAR2(12)
CITY                                      NOT NULL VARCHAR2(30)
STATE_PROVINCE                                     VARCHAR2(25)
COUNTRY_ID                                         CHAR(2)
A script to access the post code column would be:
$s = oci_parse($c, "select postal_code from locations");
oci_execute($s);
while ($row = oci_fetch_array($s, OCI_ASSOC)) {
echo $row["POSTAL_CODE"] . "<br>\n";
}
This displays:
00989
10934
1689
6823
26192
. . .
151
C# Create PDF Library SDK to convert PDF from other file formats
component to create searchable PDF document from Microsoft Office Word, Excel and Create and save editable PDF with a blank page, bookmarks, links, signatures
pdf fillable form creator; create a pdf form that can be filled out
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
NET PDF SDK- Create PDF from Word in Visual An excellent .NET control support convert PDF to multiple Create fillable and editable PDF documents from Excel in
build pdf forms; adding text to pdf form
Executing SQL Statements With OCI8
Fetching Case Sensitive Column Names to an Associative Array
If the table column names were created case sensitively by using quotes at table creation, 
then the PHP array indices need to match the case:
SQL> create table cs_tab ("MyCol" number);
SQL> describe cs_tab
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
MyCol                                              NUMBER
This should be fetched in PHP as:
while ($row = oci_fetch_array($s, OCI_ASSOC)) {
echo $row['MyCol'] . "<br>\n";
}
Duplicate Column Names and Associative Arrays
In an associative array index there is no table prefix for the column name. If you have to join 
tables where the same column name occurs with different meanings in both tables, use a 
column alias in the query. Otherwise only one of the similarly named columns will be returned 
by PHP.
This contrived example selects two columns called COLOR:
$s = oci_parse($c, "select cat_name,
cats.color as cat_color,
dog_name,
dogs.color
from cats, dogs");
oci_execute($s);
while ($row = oci_fetch_array($s, OCI_ASSOC)) {
echo $row["CAT_NAME"] . " " . $row["CAT_COLOR"] . " - " .
$row["DOG_NAME"] . " " . $row["COLOR"] . " " .
"<br>\n";
}
The associative array has COLOR and CAT_COLOR indices for the two different COLOR 
columns.
A straightforward alternative is to use OCI_NUM to return numeric array indexes.
Fetching to an Object
Fetching as objects allows property-style access to be used.
$s = oci_parse($c, 'select * from locations');
oci_execute($s);
while ($row = oci_fetch_object($s)) {
var_dump($row);
}
This shows each row is an object and gives its properties. The var_dump() function prints and 
automatically formats the variable $row. The output is:
152
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
add text field to pdf; change font size in pdf fillable form
VB.NET PDF Convert to Word SDK: Convert PDF to Word library in vb.
Convert PDF document to DOC and DOCX formats in Visual Basic .NET NET control to export Word from multiple PDF Create editable Word file online without email.
create a fillable pdf form online; change font size in pdf form field
Fetch Functions
object(stdClass)#1 (6) {
["LOCATION_ID"]=>
string(4) "1000"
["STREET_ADDRESS"]=>
string(20) "1297 Via Cola di Rie"
["POSTAL_CODE"]=>
string(5) "00989"
["CITY"]=>
string(4) "Roma"
["STATE_PROVINCE"]=>
NULL
["COUNTRY_ID"]=>
string(2) "IT"
}
. . .
If the loop is changed to:
while ($row = oci_fetch_object($s)) {
echo "Address is " . $row->STREET_ADDRESS . "<br>\n";
}
the output is:
Address is 1297 Via Cola di Rie
Address is 93091 Calle della Testa
Address is 2017 Shinjuku-ku
Address is 9450 Kamiya-cho
Address is 2014 Jabberwocky Rd
. . .
Defining Output Variables
Explicitly setting output variables can be done with oci_define_by_name(). This example 
fetches city names:
$s = oci_parse($c, 'select city from locations');
oci_define_by_name($s, 'CITY', $city);  // column name is uppercase
oci_execute($s);
while (oci_fetch($s)) {
echo "City is " . $city . "<br>\n";
}
The define is done before execution so Oracle knows where to store the output. The column 
name in the oci_define_by_name() call must be in uppercase unless the table was created 
with case sensitive column names. The result is:
City is Roma
City is Venice
City is Tokyo
City is Hiroshima
City is Southlake
. . .
153
Executing SQL Statements With OCI8
The oci_define_by_name() function has an optional type parameter that is useful, for 
example, to specify that the PHP variable should be a LOB. 
Fetching Nested Cursors
The next example shows a query that fetches two data values. The first is the 
DEPARTMENT_NAME and the second is a nested cursor for the sub-query of people within that 
department. This second value is given the column alias NC:
Script 26: nestedcur1.php
<?php
$c = oci_connect('hr', 'welcome', 'localhost/XE');
$sql = 
'select department_name, 
cursor(select first_name 
from employees
where employees.department_id = departments.department_id) as nc
from departments
where department_id in (10, 20, 30)';
$s = oci_parse($c, $sql);
$r = oci_execute($s);
while (($row1 = oci_fetch_array($s, OCI_ASSOC)) != false) {
echo "Department: " . $row1['DEPARTMENT_NAME'] . "<br>\n";
$nc = $row1['NC'];         // treat as a statement resource
oci_execute($nc);
while (($row2 = oci_fetch_array($nc, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo $row2['FIRST_NAME'] . "<br>\n";
}
oci_free_statement($nc);
echo "<br>\n";
}
?>
The value in $nc is treated like a parsed query. After executing $nc any of the fetch functions 
can be used. The output is:
Department: Administration
Jennifer
Department: Marketing
Michael
Pat
Department: Purchasing
Den
Alexander
Shelli
Sigal
Guy
154
Fetch Functions
Karen
Fetching and Working With Numbers
Number Formatting and String Conversion
When fetching numbers, a conversion to string representation is done by Oracle. This means 
Oracle formats the data according to its globalization settings. In some regions the decimal 
separator for numbers might be a comma, causing problems if your PHP script later casts the 
string to a PHP number for an arithmetic operation. Oracle’s default format can be changed 
easily and it is recommended to explicitly set the number conversion format 
NLS_NUMERIC_CHARACTERS to '.,' if the default value inherited from your territory settings 
is different. See Setting the Oracle Number Format with NLS_NUMERIC_CHARACTERS in the 
chapter Globalization.
Number Accuracy
PHP and Oracle differ in their arithmetic handling and precision so a choice must be made 
where to do calculations.
If your application depends on numeric accuracy with financial data, do arithmetic in 
Oracle SQL or PL/SQL, or consider using PHP’s bcmath extension. 
This example shows how by default PHP fetches numbers as strings, and the difference 
between doing arithmetic in PHP and the database. SQL statements to create the number 
data are:
create table dt (cn1 number, cn2 number);
insert into dt (cn1, cn2) values (71, 70.6);
commit;
PHP code to fetch the row is:
$s = oci_parse($c, "select cn1, cn2, cn1 - cn2 as diff from dt");
oci_execute($s);
$row = oci_fetch_array($s, OCI_ASSOC);
var_dump($row);
The var_dump() function shows the PHP data type for numeric columns is string:
array(3) {
["CN1"]=>
string(2) "71"
["CN2"]=>
string(4) "70.6"
["DIFF"]=>
string(2) ".4"
}
Arithmetic calculations are handled with different precision in PHP. The previous example 
showed the result of the subtraction was the expected value. If the code is changed to do the 
subtraction in PHP:
$row = oci_fetch_array($s, OCI_ASSOC);
155
Executing SQL Statements With OCI8
$diff = $row['CN1'] - $row['CN2'];
echo "PHP difference is " . $diff . "\n";
The output shows:
PHP difference is 0.40000000000001
PHP has a php.ini parameter precision which determines how many significant digits are 
displayed in floating point numbers. By default it is set to 14.
Fetching and Working With Dates
Oracle has capable date handling functionality, supporting various needs. Dates and times 
with user specified precisions can be stored. Oracle's date arithmetic makes calendar work 
easy.
DATE, DATETIME and INTERVAL types are fetched from Oracle as strings, similar to the way 
PHP returns Oracle's numeric types.
The DATE type has resolution to the second but the default format is often just the day, 
month and year. This example queries a date column:
$s = oci_parse($c, "select hire_date from employees where employee_id = 200");
oci_execute($s);
$row = oci_fetch_array($s, OCI_ASSOC);
echo "Hire date is " . $row['HIRE_DATE']. "\n";
If the default format is the Oracle American standard of DD-MON-YY then the output is:
Hire date is 17-SEP-87
Dates inserted are expected to be in the default Oracle format too:
$s = oci_parse($c, "insert into mydtb (dcol) values ('04-AUG-07')");
oci_execute($s);
The default format can be changed with Oracle's globalization setting NLS_DATE_FORMAT 
before or after PHP starts. See the chapter Globalization.
Regardless of the default, any statement can use its own custom format. When querying, 
use the TO_CHAR() function. When inserting, use TO_DATE():
// insert a date
$s = oci_parse($c, 
"insert into mydtb (dcol)
values (to_date('2006/01/01 05:36:50', 'YYYY/MM/DD HH:MI:SS'))");
oci_execute($s);
// fetch a date
$s = oci_parse($c, "select to_char(dcol, 'DD/MM/YY') as dcol from mydtb");
oci_execute($s);
$row = oci_fetch_array($s, OCI_ASSOC);
echo "Date is " . $row["DCOL"] . "\n";
The output is:
Date is 01/01/06
156
Documents you may be interested
Documents you may be interested