ALP - Aquileia Linux Project
http://forum.alproject.org/

Errore SQL1090
http://forum.alproject.org/viewtopic.php?f=14&t=1100
Pagina 1 di 1

Autore:  ciccio71 [ 29/04/2010, 12:10 ]
Oggetto del messaggio:  Errore SQL1090

Ciao a tutti, mi sono iscritto perchè ho notato che trattate approfonditamente le connessioni php verso as400 con i driver di client access. per linux.
Il mio problema è questo: ho installato da poco un macchina Ubuntu 9.10 sula quale ho configurato php, mysql ed apache (tutto a mano).
Per motivi di lavoro devo collegarmi all'as400 dell'azienda per la quale lavoro per creare delle pagine di ricerca. Ho configurato unixODBC e funziona, ma quando tento di lanciare uno statement sql che contiene il carattere £, php mi ritorna errore. Se invece lancio un statement sql che non contiene £ ma $ (le mie librerie su as400 possono chiamarsi con nomi che iniziano con £ o $) tutto funziona.
Ho provato a lanciare la stessa ricerca dalla console di isql tramite bash e.. funziona correttamente.
Dove potrebbe essere il problema?
Allego il messaggio di errore che compare su browser quando lancio la ricerca sulla libreria £ ed anche la stringa sql.
Grazie a tutti.

Warning: odbc_exec() [function.odbc-exec]: SQL error: [unixODBC][IBM][iSeries Access ODBC Driver]Invalid string or buffer length., SQL state S1090 in SQLExecDirect in /var/www/As400/inventario.php on line 50

Il codice della pagina php è il seguente:
Codice:
<html>
 <head>
 <title> Gestione Inventario </title>
 <link rel="shortcut icon" href="./images/as400.ico" type="image/x-icon">
 <link rel="stylesheet" type="text/css" href="css/default.css">
 </head>

<?php

include ("config.php");
/* APRO CONNESSIONE AS400 */

//$db_user=$_POST["username"];
//$db_pwd=$_POST["password"];

$connessione = odbc_connect(DSN, DB_USER, DB_PASS);

if (!$connessione)
   {
?> 
  <br>
    <table align="center" width="500" cellspacing="0" cellpadding="4" border="1">
      <tr bgcolor="#e2e2e2">
        <td>
          <font color="#000000" face="helvetica,verdana" size="5">
           <b>PROBLEMI DI CONNESSIONE</b>
          </font>
        </td>
      </tr>
      <tr>
        <td>
          <font size="2" color="#4F4F4F" face="Helvetica, Verdana">
            Il server NON è momentaneamente <b>disponibile</b>
            e NON si può stabilire una connessione. Vi invitiamo a
            riprovare più tardi. Se il problema persiste, per favore,
            segnalatelo al<b><i>
            <a href="mailto:suzzi@gruppob.it">webmaster</a></i></b>.
          </font>
        </td>
      </tr>
    </table>
   
    <?
    exit;
    }

 
$sql = 'select le9cm0 from t42l_£sodi.£leguif0';

$result = odbc_exec($connessione, $sql);
   
if (!$result) { echo("ERRORE\n"); }
else
{
while ($row=odbc_fetch_object($result))
{
$fatte = $row->fatte;
$le9cm1 = $row->le9cm0;

echo "<br>\n" . "Magazzino: " . $le9cm0;
 
echo "<br>\n" .  "Numero celle inventariate : " . $nbrcell;
}
@odbc_free_result($result);
}   
@odbc_close($connessione);

?>

Autore:  matteocisilino [ 03/05/2010, 21:13 ]
Oggetto del messaggio:  Re: Errore SQL1090

Mi spieghi poi cos'è per te "le9cm0" una libreria , una variabile o un oggetto ?

Autore:  ciccio71 [ 06/05/2010, 7:26 ]
Oggetto del messaggio:  Re: Errore SQL1090

Allora ti spiego meglio:
le9cm0 è il campo del file di database
t42e_£sodi è la libreria
Codice:
[b]£leguif0[/b] è il file
Sembra proprio che al driver odbc non piaccia il carattere £; ho fatto delle prove di vario tipo ma se c'è quel carattere da errore.
Ho provato ad attivare il log dell'odbc ma non si capisce molto...
Comunque lo allego nel caso tu abbia maggiore esperienza
[code]ODBC][3105][__handles.c][444]
      Exit:[SQL_SUCCESS]
         Environment = 0x21eb52c8
[ODBC][3105][SQLAllocHandle.c][345]
      Entry:
         Handle Type = 2
         Input Handle = 0x21eb52c8
[ODBC][3105][SQLAllocHandle.c][463]
      Exit:[SQL_SUCCESS]
         Output Handle = 0x21eb5870
[ODBC][3105][SQLConnect.c][3549]
      Entry:           
         Connection = 0x21eb5870           
         Server Name = [AS400][length = 5 (SQL_NTS)]           
         User Name = [suzzi][length = 5 (SQL_NTS)]           
         Authentication = [*********][length = 9 (SQL_NTS)]
      UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

[ODBC][3105][SQLConnect.c][4123]
      Exit:[SQL_SUCCESS]
[ODBC][3105][SQLDisconnect.c][204]
      Entry:           
         Connection = 0x21eb5870
[ODBC][3105][SQLDisconnect.c][341]
      Exit:[SQL_SUCCESS]
[ODBC][3105][SQLFreeHandle.c][268]
      Entry:
         Handle Type = 2
         Input Handle = 0x21eb5870
[ODBC][3105][SQLFreeHandle.c][317]
      Exit:[SQL_SUCCESS]
[ODBC][3105][SQLFreeHandle.c][203]
      Entry:
         Handle Type = 1
         Input Handle = 0x21eb52c8
[ODBC][3107][__handles.c][444]
      Exit:[SQL_SUCCESS]
         Environment = 0x21eb32c0
[ODBC][3107][SQLAllocHandle.c][345]
      Entry:
         Handle Type = 2
         Input Handle = 0x21eb32c0
[ODBC][3107][SQLAllocHandle.c][463]
      Exit:[SQL_SUCCESS]
         Output Handle = 0x21eb3868
[ODBC][3107][SQLConnect.c][3549]
      Entry:           
         Connection = 0x21eb3868           
         Server Name = [AS400][length = 5 (SQL_NTS)]           
         User Name = [CA400_CC][length = 8 (SQL_NTS)]           
         Authentication = [********][length = 8 (SQL_NTS)]
      UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

[ODBC][3107][SQLConnect.c][4123]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLAllocHandle.c][510]
      Entry:
         Handle Type = 3
         Input Handle = 0x21eb3868
[ODBC][3107][SQLAllocHandle.c][872]
      Exit:[SQL_SUCCESS]
         Output Handle = 0x21ecc6c0
[ODBC][3107][SQLGetInfo.c][214]
      Entry:           
         Connection = 0x21eb3868           
         Info Type = SQL_FETCH_DIRECTION (8)           
         Info Value = 0xbfdcfcdc           
         Buffer Length = 4           
         StrLen = (nil)
[ODBC][3107][SQLGetInfo.c][528]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLSetStmtOption.c][174]
      Entry:           
         Statement = 0x21ecc6c0           
         Option = SQL_ATTR_CURSOR_TYPE           
         Value = 3
[ODBC][3107][SQLSetStmtOption.c][370]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLExecDirect.c][233]
      Entry:           
         Statement = 0x21ecc6c0           
         SQL = [select le9cm0 from t42l_£sodi.£leguif0][length = 38 (SQL_NTS)]
[ODBC][3107][SQLExecDirect.c][496]
      Exit:[SQL_ERROR]
      DIAG [S1090] [IBM][iSeries Access ODBC Driver]Invalid string or buffer length.

[ODBC][3107][SQLError.c][342]
      Entry:               
         Statement = 0x21ecc6c0               
         SQLState = 0xbfdcfa7e               
         Native = 0xbfdcfa84               
         Message Text = 0xbfdcfa8c               
         Buffer Length = 511               
         Text Len Ptr = 0xbfdcfa8a
[ODBC][3107][SQLError.c][379]
      Exit:[SQL_SUCCESS]                   
         SQLState = S1090                   
         Native = 0xbfdcfa84 -> 30038                   
         Message Text = [[unixODBC][IBM][iSeries Access ODBC Driver]Invalid string or buffer length.]
[ODBC][3107][SQLFreeStmt.c][140]
      Entry:           
         Statement = 0x21ecc6c0           
         Option = 1
[ODBC][3107][SQLFreeHandle.c][365]
      Entry:
         Handle Type = 3
         Input Handle = 0x21ecc6c0
[ODBC][3107][SQLFreeHandle.c][462]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLDisconnect.c][204]
      Entry:           
         Connection = 0x21eb3868
[ODBC][3107][SQLDisconnect.c][341]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLFreeHandle.c][268]
      Entry:
         Handle Type = 2
         Input Handle = 0x21eb3868
[ODBC][3107][SQLFreeHandle.c][317]
      Exit:[SQL_SUCCESS]
[ODBC][3107][SQLFreeHandle.c][203]
      Entry:
         Handle Type = 1
         Input Handle = 0x21eb32c0
[ODBC][9221][__handles.c][444]
      Exit:[SQL_SUCCESS]
         Environment = 0x21ebb2e0
[ODBC][9221][SQLAllocHandle.c][345]
      Entry:
         Handle Type = 2
         Input Handle = 0x21ebb2e0

Autore:  matteocisilino [ 15/05/2010, 7:30 ]
Oggetto del messaggio:  Re: Errore SQL1090

il file php che hai creato ha l'encoding UTF8 ?
se lo salvi in ISO il carattere "pound" non viene letto correttamente

Autore:  ciccio71 [ 17/05/2010, 7:44 ]
Oggetto del messaggio:  Re: Errore SQL1090

Come faccio a salvare il file php in UTF 8?
Ho provato ad inserire l'struzione utf8_decode($sql); dove $sql è lo statement che deve essere eseguito ma niente di nuovo.

Autore:  matteocisilino [ 17/05/2010, 17:24 ]
Oggetto del messaggio:  Re: Errore SQL1090

no , quando crei il file php sincerati che l0'editor salvi il file in UTF8 , così da poter scrivere caratteri e farli leggere come si deve .

ti consiglio di usare un editor serio , non fare l'evoluto con Notepad , perchè è inutile .

Autore:  ciccio71 [ 18/05/2010, 13:20 ]
Oggetto del messaggio:  Re: Errore SQL1090

Ho provato a salvarlo in UTF con PSPad ma da lo stesso tipo di errore...
:x :x

Autore:  matteocisilino [ 18/05/2010, 18:58 ]
Oggetto del messaggio:  Re: Errore SQL1090

mhm , sto pensando a mille modi per ovviare .
Ma l'unica cosa che mi viene in testa è "da pazzi usare il simbolo del pound nel nome di una tabella" .

se vai un var_dump() della query la string aè scritta bene ?
cerca di poter fare i log delle query e vedere che costa viene scritto .

Autore:  ciccio71 [ 19/05/2010, 8:22 ]
Oggetto del messaggio:  Re: Errore SQL1090

Ho aggiunto il var_dump() ed ecco cosa appare

string(38) "select le9cm0 from t42l_£sodi.£leguif0" select le9cm0 from t42l_£sodi.£leguif0
Warning: odbc_exec() [function.odbc-exec]: SQL error: [unixODBC][IBM][iSeries Access ODBC Driver]Invalid string or buffer length., SQL state S1090 in SQLExecDirect in /var/www/As400/inventario.php on line 76
ERRORE
Sembra che la stringa sql sia corretta.
:? :?

Autore:  matteocisilino [ 23/05/2010, 8:47 ]
Oggetto del messaggio:  Re: Errore SQL1090

il var_dump() ti restituisce quello che vede il server PHP , non quello che riporta il motore SQL del AS .

Pagina 1 di 1 Tutti gli orari sono UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/