PHP multidimentionaal array variabele in SQL statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Stroobant

Jan Stroobant

19/03/2020 00:44:43
Quote Anchor link
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
 
PHP hulp

PHP hulp

24/04/2024 00:47:39
 
- Ariën  -
Beheerder

- Ariën -

19/03/2020 00:47:21
Quote Anchor link
Laat je hele SQL eens zien?
En ook een print_r() op $FCCB
 
Jan Stroobant

Jan Stroobant

19/03/2020 00:57:11
Quote Anchor link
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 ) )

Toevoeging op 19/03/2020 01:20:00:

Het correcte foutbericht dat ik hierbij krijg = Notice: Array to string conversion in...
 
Thomas van den Heuvel

Thomas van den Heuvel

19/03/2020 02:00:44
Quote Anchor link
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.
 
Jan Stroobant

Jan Stroobant

19/03/2020 03:01:35
Quote Anchor link
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.
 
Michael -

Michael -

19/03/2020 06:43:22
Quote Anchor link
"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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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.
Gewijzigd op 19/03/2020 06:48:38 door Michael -
 
Jan Stroobant

Jan Stroobant

19/03/2020 09:57:18
Quote Anchor link
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
 
Thomas van den Heuvel

Thomas van den Heuvel

19/03/2020 10:40:14
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'])."'"
    ...";
?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT ...
FROM C_APPLICATS_11 ap
INNER JOIN C_FORM_TYPES_08 ft ON (ft.application_id = ap.application_id)
WHERE ...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.