Hopelijk kan iemand mij hiermee helpen:
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
Laat je hele SQL eens zien?
En ook een print_r() op $FCCB
Hierbij de sql:
$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 ) )

[size=xsmall]Toevoeging op 19/03/2020 01:20:00:[/size]

Het correcte foutbericht dat ik hierbij krijg = Notice: Array to string conversion in...
Maar dat is een andere foutmelding dan de eerste, die mogelijk op een compleet andere plek zijn oorsprong heeft.

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.
Beste Thomas,
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.
"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"

Zeker wel.
<?php
$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.
Beste 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
Quotes om indexen is niet hetzelfde als quotes om een complete PHP-variabele ;).

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:
<?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'])."'"
    ...";
?>

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:
SELECT ...
FROM C_APPLICATS_11 ap
INNER JOIN C_FORM_TYPES_08 ft ON (ft.application_id = ap.application_id)
WHERE ...

Reageren