SQL string werkt niet
de varchar is een session_id()
als ik het zo doe:
Code (php)
1
2
3
4
5
6
7
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'];
}
?>
$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)
1
2
3
4
5
6
7
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'];
}
?>
$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 ?
en
session_id()
Zoek de verschillen....
er staan wel degelijk haakjes achter session_id()
Code (php)
1
2
3
2
3
<?php
$get = mysql_query('SELECT id, item_id FROM tabel WHERE item_id='.session_id());
?>
$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)
1
2
3
2
3
<?php
$get = mysql_query('SELECT id, item_id FROM tabel WHERE item_id="'.session_id().'" ORDER BY item_id');
?>
$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
aan het eind
of gewoon
goed dat het werkt maar ben nieuwsgierig wat er nu precies aan de hand is
Correctie:
Code (php)
1
2
3
2
3
<?php
$get = mysql_query("SELECT `id`, `item_id` FROM `tabel` WHERE `item_id`='".session_id()."'");
?>
$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
Wat betreft het antwoord op de vraag: session_id() is een string, geen integer en moet dus geescaped worden met "... dus:
Code (php)
1
2
3
2
3
<?php
$get = mysql_query('SELECT id, item_id FROM tabel WHERE item_id="'.session_id().'"');
?>
$get = mysql_query('SELECT id, item_id FROM tabel WHERE item_id="'.session_id().'"');
?>
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
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
Bedankt het is me nu wel een stuk duidelijker geworden
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.
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.