mysql ON duplicate entry
De volgende regel code deed zijn werk
Code (php)
1
2
3
4
2
3
4
<?PHP
ON duplicate KEY UPDATE user_id=user_id, img_name='".$this->_base."',
email='".$this->_user->email."', img_location=img_location, img_type=img_type")
?>
ON duplicate KEY UPDATE user_id=user_id, img_name='".$this->_base."',
email='".$this->_user->email."', img_location=img_location, img_type=img_type")
?>
Ik heb wat rondgekeken op de forum, maar ik ben wat verward met de "ON duplicate KEY entry" kan ik hier mee niet de kolommen updaten van mijn mysql_query of is dit alleen voor de primaire sleutel??
Ik heb nu de onderstaande code maar krijg steeds een fout melding.
Kan iemand mij uitleggen wat ik hier fout doe??
Ik kan uiteraard ook met een if-statement controleren of het id al bestaat en dan een update query uitvoeren, maar ON duplicate is veel netter vindt ik.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
mysql_query("INSERT INTO profile
(
user_id,
email,
img_name,
img_location,
img_type
)
VALUES (
'".$this->_user->user_id."',
'".$this->_user->email."',
'".$this->_base."',
'".$this->_user->user_id."',
'.jpg'
)ON duplicate KEY UPDATE
img_name=values('".$this->_base."'),
email=values('".$this->_user->email."'),
img_location=values('".$this->_user->user_id."'),
img_type=values('.jpg')")or die(mysql_error());
?>
mysql_query("INSERT INTO profile
(
user_id,
email,
img_name,
img_location,
img_type
)
VALUES (
'".$this->_user->user_id."',
'".$this->_user->email."',
'".$this->_base."',
'".$this->_user->user_id."',
'.jpg'
)ON duplicate KEY UPDATE
img_name=values('".$this->_base."'),
email=values('".$this->_user->email."'),
img_location=values('".$this->_user->user_id."'),
img_type=values('.jpg')")or die(mysql_error());
?>
foutmelding:
Code (php)
Gewijzigd op 07/10/2010 22:18:01 door Karizma Yusuf
query loopt dus stuk op:
img_name=values('".$this->_user->base."'),
$this->_user->base heeft een quote -> '''),
Vraag:
wat moet dit voorstellen
values('".$this->_user->base."')
Heb je nu daadwerklijk z'n naam voor SQL FUNCTIE/PROCEDURE of hoop je dat er een php fucntie met die wazige naam wordt aangeroepen.
Codeer duidelijk, zodat er geen misverstanden over kunnen ontstaan van wat wat is.
$base = VoornaamAchternaam
Ja, ik snap dan ook niet wat ik fout doe.
Moet dan tog gewoon werken en zoiets heb ik tog boven ook?? Of begrijp ik de functie verkeerd??
Gewijzigd op 07/10/2010 21:04:39 door Karizma Yusuf
Code (php)
dus
dan komt er in je query te staan:
img_name=values('z'n phpscript heb ik nie gezien'),
en dat gaat geen enkele database begrijpen
En nu nog antwoord geven op mijn vraag of heb je geen flauw benul?
Oh niets doen tegen SQL Injectie, ook met eigen gegevens kan je je database flink onderuit halen.
Gewijzigd op 07/10/2010 21:10:07 door Noppes Homeland
als ik een echo uitvoer op $this->_base krijg ik dan ook voornaamAchternaam
ZONDER the on duplicate werkt het prima, snap alleen niet waar het fout zit.
Quote:
Oh niets doen tegen SQL Injectie, ook met eigen gegevens kan je je database flink onderuit halen.
DEZE gegevens zijn al een TIG keer door een SQL injectie gehaald dus ik weet niet wat voor onzin jij nu praat met je SQL injecties. Dit is maar een gedeelte van de script dat een fout geeft.
Gewijzigd op 07/10/2010 21:19:31 door Karizma Yusuf
En dat $this->_base geen functie is dat kan ik ook nog wel lezen en zelfs begrijpen.
Nogmaals dan:
de foutmelding geeft duidelijk aan dat op deze regel
img_name=values('".$this->_base."'),
de excutie fout loopt!
en ook duidelijk dat er een quote te veel staat op die regel staat
maar geef nu eens antwoord op mijn vraag want daar heb je nog steeds geen duidelijkheid over gegeven.
Is values een SQL FUCNTIE/PROCEDURE of een PHP functie / method
en dan ook maar gelijk vragen wat dat dan doet met de doorgegeven variabele.
Quote:
DEZE gegevens zijn al een TIG keer door een SQL injectie gehaald dus ik weet niet wat voor onzin jij nu praat met je SQL injecties. Dit is maar een gedeelte van de script dat een fout geeft.
Dan is het een allerbelabberste protectie tegen SQL Injectie
Gewijzigd op 07/10/2010 21:25:22 door Noppes Homeland
En me probleem is al opgelost.
Hoe heb je het opgelost?
Staat in me 1e reactie
Noppes Homeland op 07/10/2010 21:22:06:
Oke een typotje kan er ook nog wel bij
En dat $this->_base geen functie is dat kan ik ook nog wel lezen en zelfs begrijpen.
Nogmaals dan:
de foutmelding geeft duidelijk aan dat op deze regel
img_name=values('".$this->_base."'),
de excutie fout loopt!
en ook duidelijk dat er een quote te veel staat op die regel staat
maar geef nu eens antwoord op mijn vraag want daar heb je nog steeds geen duidelijkheid over gegeven.
Is values een SQL FUCNTIE/PROCEDURE of een PHP functie / method
en dan ook maar gelijk vragen wat dat dan doet met de doorgegeven variabele.
Dan is het een allerbelabberste protectie tegen SQL Injectie
En dat $this->_base geen functie is dat kan ik ook nog wel lezen en zelfs begrijpen.
Nogmaals dan:
de foutmelding geeft duidelijk aan dat op deze regel
img_name=values('".$this->_base."'),
de excutie fout loopt!
en ook duidelijk dat er een quote te veel staat op die regel staat
maar geef nu eens antwoord op mijn vraag want daar heb je nog steeds geen duidelijkheid over gegeven.
Is values een SQL FUCNTIE/PROCEDURE of een PHP functie / method
en dan ook maar gelijk vragen wat dat dan doet met de doorgegeven variabele.
Quote:
DEZE gegevens zijn al een TIG keer door een SQL injectie gehaald dus ik weet niet wat voor onzin jij nu praat met je SQL injecties. Dit is maar een gedeelte van de script dat een fout geeft.
Dan is het een allerbelabberste protectie tegen SQL Injectie
Zoals je aan zijn code al kan zien is het een variabele in een klasse. Deze kan al prima gecontroleerd zijn, voordat die naar de query gaat. Ik knal ook altijd variabelen zo in een query, juist omdat ik ze vantevoren al controleer. Kan je wel zeggen dat het een slechte protectie is, maar dat kan je er niet eens uit halen.