PHP multidimentionaal array variabele in SQL statement
Ik heb een SQL statement en in de WHERE clause wil ik gebruik maken van een multidimensionale array variabele.
Het fragment van de where clause: "...where application_id = '$FCCB[FormNrDetails][application_id]'..."
Hierop krijg ik de foutmelding: Notice: Undefined index: FormNrDetails in...
De FCCB array:
Array
(
[FormNrDetails] => Array
(
[application_id] => 8
)
Graag een hint van wat ik hier fout doe, of hoe ik de array in SQL moet specifieren.
Alvast bedankt, Jan
En ook een print_r() op $FCCB
$sql2 = ("select * "
."from C_APPLICATS_11 ap "
.", C_FORM_TYPES_08 ft "
."where ap.application_id = '$FCCB[FormNrDetails][application_id]' "
."and ft.application_id = ap.application_id "
."and ft.form_type = '$FCCB[FormNrDetails][form_type]' "
) ;
en ook de print_r($FCCB):
.Array ( [FNR] => CHOPS CB001002 [FormNrDetails] => Array ( [form_nr] => CHOPS CB001002 [application_id] => 8 [form_type] => 3 [company_code] => 1 [form_number] => 1002 [FORM_NR] => CHOPS CB001002 [APPLICATION_ID] => 8 [FORM_TYPE] => 3 [COMPANY_CODE] => 1 [FORM_NUMBER] => 1002 [FORM_CONDITION] => 0 ) )
Toevoeging op 19/03/2020 01:20:00:
Het correcte foutbericht dat ik hierbij krijg = Notice: Array to string conversion in...
Het kan waarschijnlijk in ieder geval geen kwaad om de tekstuele indexen te voorzien van 'quotes', anders denkt PHP dat het constanten betreft.
Als dat de problemen niet oplost zullen we even naar de laatste (correcte) foutmelding moeten kijken, en nagaan op welke regels en variabelen deze precies betrekking heeft.
In PHP code zelf moeten de indexen van dubbele quotes voorzien worden. In het SQL statement echter niet want dan krijg ik een 'PARSE' error: Parse error: syntax error, unexpected '"', expecting....
Merkwaardig genoeg blijkt enkele indexering in een SQL statement wel te werken, zoals bv.:
."where FT.FORM_NR = '$FCCB[FNR]' " uit een ander stuk SQL.
Van zodra ik echter dubbele indexering gebruik zoals in mijn vb: '$FCCB[FormNrDetails][application_id]' werkt het niet meer.
Zeker wel.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "SELECT
FORM_NR
FROM
C_APPLICATS_11 ap
WHERE
FORM_NR = '" . $FCCB['FNR'] . "'";
?>
$sql = "SELECT
FORM_NR
FROM
C_APPLICATS_11 ap
WHERE
FORM_NR = '" . $FCCB['FNR'] . "'";
?>
EDIT je hebt het twee keer over een notice. Dit is niet perse een keiharde fout.
De eerste is dat de index van FormNrDetails niet is gedefinieerd dus deze bestaat niet.
De tweede is dat je een array wilt gebruiken alsof het een string is.
Gewijzigd op 19/03/2020 06:48:38 door Michael -
Bedankt voor deze schrijfwijze tip. Die werkt ook met dubbel index omdat we hier concatenatie van tekst en native PHP gebruiken.
Dit lost mijn probleem op, bedankt hiervoor.
Mvg, Jan
Voor de goede orde zouden ook alle DATA-delen in jouw SQL ge-escaped moeten worden. En dit is alleen veilig in combinatie met quotes, dit keer in de SQL :).
Bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$query =
"SELECT *
FROM C_APPLICATS_11 ap, C_FORM_TYPES_08 ft
WHERE ap.application_id = '".$db->real_escape_string($FCCB['FormNrDetails']['application_id'])."'"
...";
?>
$query =
"SELECT *
FROM C_APPLICATS_11 ap, C_FORM_TYPES_08 ft
WHERE ap.application_id = '".$db->real_escape_string($FCCB['FormNrDetails']['application_id'])."'"
...";
?>
Waarbij $db jouw database object is, er vanuitgaande dat je MySQLi gebruikt.
Mogelijk is het ook een goede gewoonte om JOINs tussen tabellen ook als JOINs uit te schrijven, in plaats van deze in het WHERE-statement op te nemen. Zo scheid je condities en verbanden beter.
Dus: