Archief - PHP: Mysql error opvragen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

RpR

Legacy Member
Ik heb volgend probleem.

ik heb een tabel categorie met 2 velden. Id (Pkey), naam (unieke waarde).

$result = mysql_query("INSERT into categorie (id, naam) VALUES (null, 'testje')");
if($result == true) {

daardoor weet ik dus of de insert gelukt is of niet. Maar indien niet zou ik graag weten waarom. Is het mogelijk om dit op te vragen?

Smontje

Legacy Member
Een primary key kan nooit null zijn dus het zal ook nooit geinsert worden, dat is een controle die al op zich bestaat omwille dat je veld id primary key is.

Ik hoop dat dit wat heldering in de zaak brengt...

RpR

Legacy Member
Smontje zei:
Een primary key kan nooit null zijn dus het zal ook nooit geinsert worden, dat is een controle die al op zich bestaat omwille dat je veld id primary key is.

Ik hoop dat dit wat heldering in de zaak brengt...

Werkt en de reden hiervoor is omdat de pkey auto-increment is.

Legendary d.C.

Legacy Member
wil je nu weten wat er fout loopt kan je dit toepassen

$result = mysql_query("INSERT into categorie (id, naam) VALUES (null, 'testje')") or die(mysql_error());

[BAT] Hydra

Legacy Member
RpR zei:
Werkt en de reden hiervoor is omdat de pkey auto-increment is.

Een evenwaardig alternatief:

INSERT into categorie (naam) VALUES ('testje')

Hier laat je dus de primary key weg, zorgt niet voor verwarring bij mensen die misschien denken dat je expliciet de primary key op null wenst te zetten.

RpR

Legacy Member
Legendary d.C. zei:
wil je nu weten wat er fout loopt kan je dit toepassen

$result = mysql_query("INSERT into categorie (id, naam) VALUES (null, 'testje')") or die(mysql_error());

Het is niet echt een mysql fout denk ik. Ik wil gewoon de reden waarom $result == false.

[BAT] Hydra

Legacy Member
De reden is de fout, dus je moet doen zoals Legendary d.C. zegt.

mysql_query: For other type of SQL statements, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

mysql_error: Note that this function only returns the error text from the most recently executed MySQL function

(bron: php.net)

RpR

Legacy Member
[BAT] Hydra;8792476 zei:
De reden is de fout, dus je moet doen zoals Legendary d.C. zegt.

mysql_query: For other type of SQL statements, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

mysql_error: Note that this function only returns the error text from the most recently executed MySQL function

(bron: php.net)

En hoe vang ik die fout dan op. Want die stopt verdere processing.

Desertfish_88

Legacy Member
bij die(); geeft hij dit gewoon weer, hij stopt met verwerken (gaat dus 'dood'),
en dumpt gewoon wat er tussen die(......) staat.
Ik vind het wel vreemd dat je nergens met je database connecteert.
ook denk ik dat het beter is dat je `...` gebruikt, en die id laat je
gemakkelijkheidshalve ook maar weg.

Wat ik zou doen:
PHP:
include("db_connect.php");
$query = "INSERT into categorie (`naam`) VALUES ('testje')";
$result = mysql_query($query, $db_connectie);
...
//en op het einde van je pagina, voor de veiligheid
include("db_disconnect.php");

de file db_connect.php is heel simpel:
PHP:
<?php
	$db_host = "localhost";
	$db_login = "JOUWLOGIN";
	$db_passwd = "JOUWPASWOORD";
	$db_name = "NAAMVANJEDATABASE";
	$db_connectie = mysql_connect($db_host,$db_login,$db_passwd);
	mysql_select_db($db_name,$db_connectie);
?>
db_disconnect.php zo mogelijk nog simpeler
PHP:
<?php
	mysql_close($db_connectie);
?>

Groetjes,
desertfish

RpR

Legacy Member
Desertfish_88 zei:
bij die(); geeft hij dit gewoon weer, hij stopt met verwerken (gaat dus 'dood'),
en dumpt gewoon wat er tussen die(......) staat.
Ik vind het wel vreemd dat je nergens met je database connecteert.
ook denk ik dat het beter is dat je `...` gebruikt, en die id laat je
gemakkelijkheidshalve ook maar weg.

Wat ik zou doen:
PHP:
include("db_connect.php");
$query = "INSERT into categorie (`naam`) VALUES ('testje')";
$result = mysql_query($query, $db_connectie);
...
//en op het einde van je pagina, voor de veiligheid
include("db_disconnect.php");
de file db_connect.php is heel simpel:
PHP:
<?php
	$db_host = "localhost";
	$db_login = "JOUWLOGIN";
	$db_passwd = "JOUWPASWOORD";
	$db_name = "NAAMVANJEDATABASE";
	$db_connectie = mysql_connect($db_host,$db_login,$db_passwd);
	mysql_select_db($db_name,$db_connectie);
?>
db_disconnect.php zo mogelijk nog simpeler
PHP:
<?php
	mysql_close($db_connectie);
?>

Groetjes,
desertfish


Wordt via includes gedaan in mijn template.

En reden waarvoor ik de error nodig heb is gewoon om een duidelijke error aan de gebruiker te geven dat een categorie met die naam al bestaat.

En ik weet dat je met 2 queries hetzelfde kan bekomen maar het is performanter om de db dit te laten afhandelen. In java ging dit makkelijk.

Dus wat ik wil is gewoon de mysql error opvangen en afhankelijk van de error code een tekst laten verschijnen.

killgore

Legacy Member
Ehm, als je wilt weten of een categorie al bestaat is het beste dat je kan doen gewoon 2queries bouwen.
Dat van performantie is zever. Dergelijke add/edit/... zaken waar je een categorie gaat bijmaken zijn in zowat elke site pagina's die een te verwaarlozen aantal keer worden opgeroepen in vergelijking met andere (request) pagina's!

Dat is een van de belangrijkste zaken die je moet leren als je met performantie bezig bent hoor: natuurlijk basis toepassen op ELKE pagina (duh :p), maar het langere, gedetailleerdere optimalisatiewerk hou je voor de stukken code (in dit geval webpagina's) die het meest worden aangeroepen.

Ook zijn 2 queries nu niet zoooo een immense bottleneck (een gemiddeld forum heeft er al een pak meer per pagina :p), het is erger als je queries begint te loopen! Dan is je pagina ten dode opgeschreven als je wat populairder wordt.

edit: nog een opmerking, als je echt om performantie geeft zoek je beter ook eens wat php glitches op, zoals deze:
PHP:
for($i=0; $i < sizeof($array); $i++) ...
Die veel trager is als:
PHP:
$l = sizeof($array);
for($i=0; $i < $l; $i++)

Er zijn er zo nog, maar dit is 1 van de bekendere voorbeelden.

edit: hier, handige site, weet wel niet of hij op php5 draait, ik heb die nog uit den tijd van php4: http://www.php.lt/benchmark/phpbench.php

RpR

Legacy Member
killgore zei:
Ehm, als je wilt weten of een categorie al bestaat is het beste dat je kan doen gewoon 2queries bouwen.
Dat van performantie is zever. Dergelijke add/edit/... zaken waar je een categorie gaat bijmaken zijn in zowat elke site pagina's die een te verwaarlozen aantal keer worden opgeroepen in vergelijking met andere (request) pagina's!

Dat is een van de belangrijkste zaken die je moet leren als je met performantie bezig bent hoor: natuurlijk basis toepassen op ELKE pagina (duh :p), maar het langere, gedetailleerdere optimalisatiewerk hou je voor de stukken code (in dit geval webpagina's) die het meest worden aangeroepen.

Ook zijn 2 queries nu niet zoooo een immense bottleneck (een gemiddeld forum heeft er al een pak meer per pagina :p), het is erger als je queries begint te loopen! Dan is je pagina ten dode opgeschreven als je wat populairder wordt.

edit: nog een opmerking, als je echt om performantie geeft zoek je beter ook eens wat php glitches op, zoals deze:
PHP:
for($i=0; $i < sizeof($array); $i++) ...
Die veel trager is als:
PHP:
$l = sizeof($array);
for($i=0; $i < $l; $i++)

Er zijn er zo nog, maar dit is 1 van de bekendere voorbeelden.

edit: hier, handige site, weet wel niet of hij op php5 draait, ik heb die nog uit den tijd van php4: http://www.php.lt/benchmark/phpbench.php

Simpel voorbeeldje maar als je bv naar plsql gaat dan is php wel veel trager dan plsql statements.

killgore

Legacy Member
RpR zei:
Simpel voorbeeldje maar als je bv naar plsql gaat dan is php wel veel trager dan plsql statements.

:wtf:, ik snap totaal niet wat je hiermee bedoelt (met betrekking tot mijn post :x)?

RpR

Legacy Member
killgore zei:
:wtf:, ik snap totaal niet wat je hiermee bedoelt (met betrekking tot mijn post :x)?

Gewoon dat inderdaad op zo een simpele opdracht 2 queries zo goed als geen verschil geeft. Maar als je met oracle werkt en pl sql opdrachten dan is de plsql veel sneller dan 2-5 verschillende queries te moeten uitvoeren.

pl sql laat bv toe om whiles en if te gebruiken op db niveau.

Vandaar mijn antwoord.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan