SQL string werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas de jong

bas de jong

29/10/2013 20:21:45
Quote Anchor link
Ik wil met onderstaand statement data opvragen met een varchar string als citeria

de varchar is een session_id()

als ik het zo doe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$get
= mysql_query('SELECT id, item_id FROM tabel WHERE item_id='.session_id);
while($get_row = mysql_fetch_assoc($get)){
echo $get_row['id'].'<br>';
echo $get_row['item_id'];
}

?>


werkt het niet hij vind de string niet

maar als ik zo doe
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$get
= mysql_query('SELECT id, item_id FROM tabel WHERE item_id="o1qvj36etsh9jn2vh138ala0p5"');
while($get_row = mysql_fetch_assoc($get)){
echo $get_row['id'].'<br>';
echo $get_row['item_id'];
}

?>

werkt het wel

eigenschappen item_id in tabel is een varchar(50) utf8_general_ci

wat kan ik hieraan doen ?
 
PHP hulp

PHP hulp

24/11/2024 02:58:17
 
- Ariën  -
Beheerder

- Ariën -

29/10/2013 20:27:24
Quote Anchor link
session_id
en
session_id()

Zoek de verschillen....
 
Bas de jong

bas de jong

29/10/2013 20:35:49
Quote Anchor link
sorry typfoutje in mijn bericht
er staan wel degelijk haakjes achter session_id()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$get
= mysql_query('SELECT id, item_id FROM tabel WHERE item_id='.session_id());
?>


Toevoeging op 29/10/2013 20:47:39:

hmm zo werkt ie wel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$get
= mysql_query('SELECT id, item_id FROM tabel WHERE item_id="'.session_id().'" ORDER BY item_id');
?>


maar wat maakt is nu het verschil tussen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php "'.session_id().'"  ORDER BY item_id'); ?>
aan het eind
of gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php '.session_id());?>


goed dat het werkt maar ben nieuwsgierig wat er nu precies aan de hand is
 
Victor G

Victor G

29/10/2013 21:15:32
Quote Anchor link
Omdat je de tags [ ' ] niet afsluit aan het einde bij je session. Je opent ze eerst, en houd hem open. Probeer het maar eens direct in SQL, gaat hij niet leuk vinden.

Correctie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$get
= mysql_query("SELECT `id`, `item_id` FROM `tabel` WHERE `item_id`='".session_id()."'");
?>
Gewijzigd op 29/10/2013 21:21:08 door Victor G
 
Joakim Broden

Joakim Broden

30/10/2013 08:17:34
Quote Anchor link
Victor daar heeft het niet mee te maken.. Die ' staat er omdat de query een string is en heeft niks met de query zelf te maken. En ga die die vieze backtics gebruiken wat dat is helemaal nergens voor nodig.

Wat betreft het antwoord op de vraag: session_id() is een string, geen integer en moet dus geescaped worden met "... dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $get
= mysql_query('SELECT id, item_id FROM tabel WHERE item_id="'.session_id().'"');
?>
 
Dos Moonen

Dos Moonen

30/10/2013 09:02:32
Quote Anchor link
@Hertog Jan
Weet je wel waarom backticks lelijk zijn? Omdat het niet standaard SQL is. De standaard SQL versie van backticks zijn dubbele aanhalings-tekens...
Enkele aanhalings-tekens zijn voor waardes, backticks en dubbele aanhalings-tekens zijn voor tabel en kolom namen.
De mooiste versie is dus wanneer je prepared statements gebruikt met vraagtekens (in het geval van MySQLi) of named parameters (PDO) op de plaatsen waar je parameters wilt hebben.

Persoonlijk vindt ik Victor's versie ietsjes mooier. Hij gebruikt de juiste aanhalings tekens en de query zal ietsjes sneller zijn door de backticks. Het nadeel is dat het alleen voor MySQL werkt. Maar hij gebruikt geen abstractie laag, dus hij zou hoe dan ook dingen moeten veranderen als hij van database zou willen wisselen.
Gewijzigd op 30/10/2013 09:02:51 door Dos Moonen
 
Erwin H

Erwin H

30/10/2013 09:47:44
Quote Anchor link
@Dos
Mooiste versie? Sinds wanneer delen we schoonheidsprijzen uit?
De 'mooiste' versie is niet de versie met parameters. Dat is alleen beter wanneer het nodig is. Is het niet nodig dan is het alleen maar trager. Verder zijn backticks alleen nodig als je een probleem hebt dat je niet zou moeten hebben, namelijk door het gebruik van reserved words voor tabellen of kolommen (of niet gebruikelijke karakters). Wat betreft snelheid, laat mij dan eens een benchmark zien waaruit duidelijk blijkt dat het gebruik van backticks de query versnelt. Ik heb het namelijk nog nooit kunnen waarnemen.
Gewijzigd op 30/10/2013 09:48:13 door Erwin H
 
Bas de jong

bas de jong

30/10/2013 12:29:56
Quote Anchor link
Bedankt het is me nu wel een stuk duidelijker geworden
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/10/2013 14:26:55
Quote Anchor link
Dos Moonen op 30/10/2013 09:02:32:
Omdat het niet standaard SQL is. De standaard SQL versie van backticks zijn dubbele aanhalings-tekens...
Enkele aanhalings-tekens zijn voor waardes, backticks en dubbele aanhalings-tekens zijn voor tabel en kolom namen.

Niet correct, standaard SQL kent geen omsluitingen voor tabel- en kolomnamen.
In geen enkele manual van een database systeem zal je deze tegenkomen.
 



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.