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)