Dubbele Like (& SQL Join)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Marco -

- Marco -

15/11/2012 09:22:12
Quote Anchor link
Hallo,

Ik probeer wat dingen te echo'en op mijn site dat gaat verder goed maar ik wou hetgene wat geëchood moet worden wat specifieker maken.

Ik heb deze code gedaan maar dan krijg ik een error.
Code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM orders WHERE email LIKE '$test' AND sent LIKE == 0";
?>


Als ik de code zo doe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM orders WHERE email LIKE '$test';
?>

Dan werkt het wel maar ik wil tot die alleen de dingen echood waar sent 0 is

Error:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
niet gelukt om de query: SELECT * FROM orders WHERE email LIKE 'henk' AND sent LIKE == 0 uit te voeren op Resource id #3
?>


hoe kan ik dit het beste oplossen?
Gewijzigd op 15/11/2012 10:04:30 door - Marco -
 
PHP hulp

PHP hulp

25/11/2024 14:34:24
 
Erwin van Hoof

Erwin van Hoof

15/11/2012 09:35:22
Quote Anchor link
Beste Marco,

Je hebt een dubbel = teken gebruikt in je query dit wordt niet ondersteund in mysql (alleen in php, zelfs ===)

Deze query zal wel het gewenste resultaat geven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM `orders` WHERE `email` LIKE '".$test."' AND `sent` = 0";
?>

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM `orders` WHERE `email` = '".$test."' AND `sent` = 0";
?>


Groet,

Erwin van Hoof
SiteOn
Gewijzigd op 15/11/2012 09:37:01 door Erwin van Hoof
 
- Marco -

- Marco -

15/11/2012 10:03:27
Quote Anchor link
Ok dankjewel dat werkte :)
Gewijzigd op 15/11/2012 10:58:05 door - Marco -
 
Ivo Breeden

Ivo Breeden

15/11/2012 12:18:07
Quote Anchor link
Erwin van Hoof op 15/11/2012 09:35:22:
...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM `orders` WHERE `email` LIKE '".$test."' AND `sent` = 0";
?>


Dat vind ik wel eigenaardig dat dit goed werkt, want er mankeert nogal wat aan de quoting en aan de wildcards. Volgens mij moet het zo.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql4
= "SELECT * FROM orders WHERE email LIKE '".$test."' AND sent = 0";
?>


Tabelnamen en kolomnamen horen normaliter niet gequote te worden. Ik neem aan dat 'sent' ook een kolomnaam is want als je hem quote krijgt hij een andere betekenis. Dan staat er "... AND 'constante' = getal". Maar hij stond tussen backquotes en daar rept de MySQL handleiding helemaal niet over dus dan weet ik niet wat er gebeurt.
En dan: je gebruikt "LIKE" als je wildcards wilt gebruiken: dus "%" voor 0 of meer willekeurige tekens en "_" voor 1 willekeurig letterteken. Zitten die wildcars in "$test"? Anders kun je beter "=" gebruiken in plaats van "LIKE".
Gewijzigd op 15/11/2012 12:20:48 door Ivo Breeden
 
- Marco -

- Marco -

15/11/2012 12:22:12
Quote Anchor link
In $test zit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    $test
= $_SESSION["email"];
    if(isset($_POST["uitloggen"]))
    {

        session_destroy();
        header("Location:".$_SERVER["PHP_SELF"]);
    }

?>


en ik gebruik deze sql ( hij werkt hoor :P )
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $sql4
= "SELECT * FROM orders WHERE email LIKE '$test' AND sent = 0";
?>
 
Ivo Breeden

Ivo Breeden

15/11/2012 12:29:42
Quote Anchor link
Hallo Marco, goed dat het werkt. Toch adviseer ik om "LIKE" door "=" te vervangen.
Want als er een slimmerik is die als e-mail adres "%" (wildcard) in vult dan zou die de orders van anderen kunnen manipuleren.
Groet,
Ivo
 
Erwin van Hoof

Erwin van Hoof

15/11/2012 12:30:01
Quote Anchor link
Als je naar de query kijkt denk ik dat Marco een rij uit de database wil halen waarbij email gelijk is aan $test en sent 0 is.
Niet waar email $test bevat.

Backticks `` zijn puur voor de veiligheid dat het hier om een veld,tabelnaam gaat. Het is verstandig om deze te gebruiken. Indien er veldnamen gebruikt worden zoals bijv. count of limit (dit zijn namelijk ook mysql functies).

Groet,

Erwin van Hoof
SiteOn
 
Ivo Breeden

Ivo Breeden

15/11/2012 12:38:56
Quote Anchor link
Dank je Erwin, dat van die backticks wist ik niet.
 
- Marco -

- Marco -

15/11/2012 14:05:34
Quote Anchor link
Maar hier word juist gezegd dat je geen backticks moet gebruiken?
http://www.phphulp.nl/php/forum/topic/wel-of-geen-backticks-in-een-query/62957/
http://www.phphulp.nl/php/forum/topic/backticks/62061/
Gewijzigd op 15/11/2012 14:05:58 door - Marco -
 
Erwin van Hoof

Erwin van Hoof

15/11/2012 16:10:20
Quote Anchor link
@Marco & Ivo:

Backticks zijn niet verplicht, net zoals het niet verplicht is om een tabs te gebruiken om je code netjes te laten inspringen etc.
Voor mij verbeterd het de leesbaarheid van de SQL code. Bij het gebruik van backticks kan er geen twijfel over bestaan dat het een benaming is van een tabel,kolom of veld.

Ik raad het gebruik van functies/commando's als tabel/kolom/veld namen af zoals count, limit, etc.

Je hebt wel felle voor en tegenstanders van backticks, ik denk dat dit vrij persoonlijk is aangezien het geen toegevoegde waarde heeft, ik vindt dat een sql-query leesbaarder word met backticks. Het is wel zo mocht je nog ooit in andere DB-types gaan werken ondersteunen deze geen backticks.
Gewijzigd op 15/11/2012 16:24:17 door Erwin van Hoof
 
John D

John D

15/11/2012 17:21:08
Quote Anchor link
In SQL geen backticks gebruiken is mijn mening. Eigenlijk helemaal geen backticks gebruiken, zijn totaal overbodig. Je kan dan geen reserved words gebruiken voor database objecten (tabelnamen e.d.) maar ook dat is juist een afrader. Geen reserved words gebruiken las MySQL objectnaam.
 



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.