Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 536
  • Last Modified:

PHP script works from command line but not from Apache

I'm trying to query a DB2 database under an AS400 but when I run  the script I get an error

The query is:

SELECT * FROM DIVISA WHERE AÑO=11 AND MES=2 AND DIA=28

Open in new window


The error is:

Warning: odbc_exec(): SQL error: [unixODBC][IBM][Controlador ODBC de iSeries Access][DB2 UDB]SQL0104 - Texto de mensaje de error no disponible. El mensaje no se puede traducir satisfactoriamente., SQL state 37000 in SQLExecDirect in /srv/www/htdocs/tipoCambio.php on line 44 Error en odbc_exec

Open in new window


I know the query has a non english character so I guess it is an encoding problem. I've use mb_convert_encoding function to solve it but it was a no go. I also uncoment the AddDefaultCharset On under httpd.conf and add it to the .htaccess file in /srv/www/htdocs to no avail.

The scripts works ok through command line (php /srv/www/htdocs(tipoCambio.php) and under IIS7.

Database is IBM DB2 and I access it through unixODBC.

Any ideas will be much appreciated,

Pancho
0
Panchux
Asked:
Panchux
  • 2
  • 2
2 Solutions
 
Ray PaseurCommented:
You can test this here:
http://www.laprbass.com/RAY_temp_panchux.php

It appears that you may want to enclose the column names in `backticks` -- the Latin1 Character Set works fine.
<?php // RAY_temp_panchux.php
error_reporting(E_ALL);

// TEST NON-ENGLISH CHARACTERS IN COLUMN NAMES IN MySQL

// IMPORTANT PAGES FROM THE MANUALS
// MAN PAGE: http://us2.php.net/manual/en/ref.mysql.php
// MAN PAGE: http://us2.php.net/manual/en/mysql.installation.php

// CONNECTION AND SELECTION VARIABLES FOR THE DATABASE
$db_host = "localhost"; // PROBABLY THIS IS OK
$db_name = "??";        // GET THESE FROM YOUR HOSTING COMPANY
$db_user = "??";
$db_word = "??";


// OPEN A CONNECTION TO THE DATA BASE SERVER
// MAN PAGE: http://us2.php.net/manual/en/function.mysql-connect.php
if (!$db_connection = mysql_connect("$db_host", "$db_user", "$db_word"))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>NO DB CONNECTION: ";
    echo "<br/> $errmsg <br/>";
}

// SELECT THE MYSQL DATA BASE
// MAN PAGE: http://us2.php.net/manual/en/function.mysql-select-db.php
if (!$db_sel = mysql_select_db($db_name, $db_connection))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>NO DB SELECTION: ";
    echo "<br/> $errmsg <br/>";
    die('NO DATA BASE');
}
// IF WE GOT THIS FAR WE CAN DO QUERIES


// WANT TO RUN A QUERY LIKE THIS:
// DIVISA WHERE AÑO=11 AND MES=2 AND DIA=28


// CREATING THE TABLE
$sql = "CREATE TEMPORARY TABLE divisa  (
        AÑO INT NOT NULL DEFAULT 0,
        MES INT NOT NULL DEFAULT 0,
        DIA INT NOT NULL DEFAULT 0     )";

if (!$res = mysql_query($sql))
{
    // MAN PAGE: http://us.php.net/manual/en/function.mysql-error.php
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql <br/>";
    die($errmsg);
}

// INSERT SOME DATA
$sql = "INSERT INTO divisa ( AÑO, MES, DIA ) VALUES ( 11, 2, 28 )";
if (!$res = mysql_query($sql))
{
    // MAN PAGE: http://us.php.net/manual/en/function.mysql-error.php
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql <br/>";
    die($errmsg);
}
$sql = "INSERT INTO divisa ( AÑO, MES, DIA ) VALUES ( 11, 2, 28 )";
if (!$res = mysql_query($sql))
{
    // MAN PAGE: http://us.php.net/manual/en/function.mysql-error.php
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql <br/>";
    die($errmsg);
}


// QUERY TO FIND THE DATA WE JUST INSERTED
$sql = "SELECT * FROM divisa WHERE AÑO=11 AND MES=2 AND DIA=28";
if (!$res = mysql_query($sql))
{
    // MAN PAGE: http://us.php.net/manual/en/function.mysql-error.php
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql <br/>";
    die($errmsg);
}
$num = mysql_num_rows($res);
echo "<br/>$num ROWS FOUND";

// SHOW THE VALUES FOR THIS TABLE
$sql = "SHOW CREATE TABLE divisa";
if (!$res = mysql_query($sql))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql <br/>";
    die($errmsg);
}
while ($show_creates = mysql_fetch_assoc($res))
{
    $my_creates[] = $show_creates["Create Table"];
}
var_dump($my_creates);

Open in new window

0
 
PanchuxAuthor Commented:
This was of no help at all.
I created a logical view of the table without the non-english characters and it worked.
You can close this question.

Pancho
0
 
Ray PaseurCommented:
Glad you've got a working solution.  Please post your solution and accept it as the answer.  That way it will get into the PAQ and others can benefit from your research.

Thanks and regards, ~Ray
0
 
PanchuxAuthor Commented:
A logical view was the only solution presented that really worked.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Easily Design & Build Your Next Website

Squarespace’s all-in-one platform gives you everything you need to express yourself creatively online, whether it is with a domain, website, or online store. Get started with your free trial today, and when ready, take 10% off your first purchase with offer code 'EXPERTS'.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now