Seiden Group
Modern Development & Open Source for IBM i
  • Link to LinkedIn
  • Link to Mail
  • Home
  • Seiden PHP+
    • Seiden PHP+
    • Install & Learn
    • SmartSupport
    • PHP Migrations & Upgrades
    • Success Stories
    • Free PHP Assessment
    • Documentation
    • What’s New (Changelog)
  • IBM i Services
    • Development
    • Training & Mentoring
    • Open Source Setup & Upgrades
    • SSL/TLS Install & Learn
    • Performance
  • Support
    • Open Source & PHP
    • VS Code for i
    • Developer Support
    • Support Success Stories
  • VS Code for i
    • Support
    • Training
    • Code for i Resource Guide
    • Getting Started Videos
    • Code for IBM i Fridays
  • Free Stuff
    • IBM i Strategy & Tips
    • PHP Upgrade Assessment
    • CNX Valence Assessment
    • VS Code for IBM i Resources
    • Code for IBM i Fridays
    • QCachegrind Download
    • PHP Toolkit for IBM i Resources
    • Qshell on i Library
  • Blog
  • About
    • About Our Team
    • About Alan Seiden
    • Speakers & Sessions
    • In the News
  • Contact
  • 201.447.2437
  • Search
  • Menu Menu

Seiden Group Blog

How to Query IBM i Data with PHP and PDO_ODBC

April 15, 2022/0 Comments/in ODBC, PHP /by Alan Seiden

ODBC & Db2 for iOf the PHP extensions that can connect to IBM i Db2, PDO_ODBC is the most flexible.

Although the classic extensions (ibm_db2, PDO_IBM) often provide the best performance and integration, PDO_ODBC does have several benefits:

  • PDO_ODBC supports many databases and PHP frameworks
  • ODBC can connect to other partitions and systems easily
  • PDO’s fetchAll() can retrieve all rows at once, to fetch small recordsets quickly
  • Supports stored procedure output parameters (when needed) better than the other extensions

Example script using PDO_ODBC to query the sample QCUSTCDT table

We included try/catch blocks to demonstrate good error handling.

Query IBM i data using PDO_ODBC
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
// check prerequisites
if (!extension_loaded('PDO')) {
    exit("PDO extension not loaded\n");
}
if (!extension_loaded('PDO_ODBC')) {
    exit("PDO_ODBC extension not loaded\n");
}
 
// connect
try {
    // NAM=1 means connect using system naming mode (enable library lists)
    $conn = new PDO('odbc:DSN=*LOCAL;NAM=1;UID=myusr;PWD=mypass',null, null, array(
        PDO::ATTR_PERSISTENT => false, // if no persistence
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // show errors as exceptions
    ));
} catch (PDOException $exception) {
    echo $exception->getMessage();
    exit;
} // (try connection)
 
$sql = "select * from QCUSTCDT where city = ?";
try {
    $query = $conn->prepare($sql);
} catch (PDOException $exception) {
    echo $exception->getMessage();
    exit;
} // (try prepare)
 
$city = 'Dallas'; // city of your choice
$query->bindParam(1, $city);
 
$query->execute();
 
$rows = $query->fetchAll();
print_r($rows);
?>

 

Note about special characters

If the User ID or Password contains a semicolon (;), wrap the value in curly braces:

1
2
$pass = 'abc;4#';
new PDO("odbc:DSN=*LOCAL;NAM=1;UID={".$user."};PWD={".$pass."}");

More about PDO_ODBC

  • PDO manual page from php.net
  • A general PDO tutorial page we like (even though it targets MySQL)
  • ODBC Connection Strings for IBM i Db2
  • Our ODBC Q&A
  • ibm_db2 & ODBC Run Side-by-Side in Seiden CP+ PHP
Tags: DB2, IBMi, odbc, pdo, pdo_odbc, PHP
Share this entry
  • Share on Facebook
  • Share on X
  • Share on Pinterest
  • Share on LinkedIn
  • Share on Tumblr
  • Share on Reddit
  • Share by Mail
https://www.seidengroup.com/wp-content/uploads/2017/03/SeidenLogo-180.png 0 0 Alan Seiden https://www.seidengroup.com/wp-content/uploads/2017/03/SeidenLogo-180.png Alan Seiden2022-04-15 04:00:492026-03-18 08:16:22How to Query IBM i Data with PHP and PDO_ODBC
Alan Seiden

About Alan Seiden

Alan works to preserve your investment in IBM enterprise systems by designing and implementing modernization strategies that leverage your existing business logic.

With a passion ...Read More

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

SUBSCRIBE
Open Thinking
Monthly IBM i Strategy & Tips
  • This field is for validation purposes and should be left unchanged.

IBM i Development

  • RPG, COBOL, SQL, Node,
    PHP, Python, Valance, etc.
  • Modernization. Integration.
  • Web and API Solutions
  • Legacy Maintenance
    ...
LET'S GET IT DONE!

Recent Posts

  • Do You Need IBM i Observability?
  • PHP 8.6 is Coming Soon to IBM i
  • Safer npm installation is on the way for Node.js (and all JavaScript)
  • Access Modern Security for IBM i and Connected Web Environments
  • IBM i: A Natural Platform for Agentic AI
  • PHP on IBM i in 2026: The Modernization Engine
  • Your “AS/400” Is a Modern IBM i Platform
  • MCP + AI for IBM i Teams (with a MongoDB example)
  • GnuPG PHP Extension for IBM i: Now Included with Seiden Support
  • Getting Started with Code for IBM i: A Lunch & Learn Video

SEIDEN GROUP: Modern Development & Open Source for IBM i

Home   |   Seiden PHP+   |   IBM i Services  |   Support   |   VS Code for i   |   Free Stuff   |   Blog  |   Privacy Policy  |   Contact         201.447.2437

© 2026 Seiden Group, LLC
  • Link to LinkedIn
  • Link to Mail
Link to: Dr. Alan’s IBM i Web Checkup Link to: Dr. Alan’s IBM i Web Checkup Dr. Alan’s IBM i Web Checkup Link to: VS Code for IBM i: A Resource Guide Link to: VS Code for IBM i: A Resource Guide VS Code for IBM i: A Resource Guide
Scroll to top Scroll to top Scroll to top