Utiulizzo PHP su AS400
Ho appena verificato che l'utilizzo della funzione i5_num_rows va in errore se nello statement SQL è presente la clausola WITH, come si può vedere da questo sorgente
Codice PHP:
$sql = "
WITH tb_dac AS (SELECT * FROM rmcdac01l1 WHERE cdalli = 277566)
SELECT t1.azabch AS cdctrt, t1.azauce AS cdalli, t2.dtcetr
FROM ceazrel0 AS t1
LEFT JOIN tb_dac AS t2 ON (t1.azabch = t2.cdctrt)
WHERE azaenm = 277566";
$res = i5_query($sql);
$num = i5_num_rows($res);
echo "First-$num: ";print_r(i5_error());echo "
";
$sql = "
SELECT t1.azabch AS cdctrt, t1.azauce AS cdalli, t2.dtcetr
FROM ceazrel0 AS t1
LEFT JOIN rmcdac01l2 AS t2 ON (t1.azabch = t2.cdctrt)
WHERE azaenm = 277566";
$res = i5_query($sql);
$num = i5_num_rows($res);
echo "Second-$num: ";print_r(i5_error());echo "
";
Che restituisce questo output
codice:
First-: Array ( [0] => -199 [1] => 1 [2] => 42601 [3] => Parola chiave AS non prevista. Token validi: FULL LEFT CROSS INNER RIGHT EXCEPTION. [num] => -199 [cat] => 1 [msg] => 42601 [desc] => Parola chiave AS non prevista. Token validi: FULL LEFT CROSS INNER RIGHT EXCEPTION. )
Second-2: Array ( [0] => 0 [1] => 0 [2] => [3] => [num] => 0 [cat] => 0 [msg] => [desc] => )
Come potete vedere il primo utilizzo dell'istruzione i5_num_rows da un errore e la variabile $num non è valorizzata, mentre nel secondo caso l'istruzione funziona perfettamente
Tenete presente che entrambi gli statement SQL sono stati provati direttamente su AS400 e funzionano correttamente e che sono stati anche provati in PHP e funzionano correttamente (eccezion fatta per l'istruzione i5_num_rows)