Hey,

In mijn vorige topic probeerde ik te checken of een record al bestaat in een tabel.
Dit was me na veel uren proberen niet gelukt. Ik heb het een beetje aangepast en krijg nu een nieuwe error.

<?php
$username="root";
$password="********";
$database="Wizzardz";

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");


$result = mysql_query("INSERT INTO account (Nickname) VALUES ('pipooo')");

$num_rows = mysql_num_rows($result);
echo "$num_rows";

mysql_close();
?>

Hierna komt natuurlijk nog het stukje waarin staat dat dat het aantal rijen niet groter mag zijn dan 0, want in dat geval bestaat er al een account met die naam. Nu krijg ik deze error:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\WizzardzAccountCreateCode.php on line 19


Hij zegt dus dat het een boolean is terwijl het een int moet zijn. Wat doe ik fout?

Heel erg bedankt alvast! ^^
De fout zit in regel 19. Lijkt me handig dat je die dan ook even post.
Retrieves the number of rows from a result set. This command is only valid for statements like SELECT or SHOW that return an actual result set. To retrieve the number of rows affected by a INSERT, UPDATE, REPLACE or DELETE query, use mysql_affected_rows().
Dit is regel 19: $num_rows = mysql_num_rows($result);

Maar num_rows = mysql_affected_rows($result); werkt net zo min sorry
En zo?

$num_rows = mysql_affected_rows();
Voor een deel is dat een probleem van je naamgeving. De naam van je variabelen.
Daardoor raak je zelf in verwarring.

Het is geen goed idee een return van een mysql_query() $result te noemen.
mysql_query() geeft je een resource weer. Daarom wordt het meestal $res genoemd.

<?php
// een vrij gebruikelijke vorm
$sql = "SELECT ... FROM ...";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
...
}
?>

Die resource wordt dus teruggegeven bij een SELECT. Daar kan je dan ook informatie uit fetchen.

Bij een insert krijg je geen resource terug.
mysql_affected_rows() vraagt dus niet om een resource van (de return van) een INSERT of UPDATE ..., maar vraagt je de database link.

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
...
$sql = "INSERT INTO ...";
if(mysql_query($sql) {
$number_of_inserts = mysql_affected_rows($link);
}
?>
Sorry ik begrijp m niet helemaal. Bedoel je zo iets:

<?php
$username="root";
$password="";
$database="Wizzardz";

$link = mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$sql = "SELECT Nickname FROM accounts";
$res = mysql_query($sql);


if(mysql_query($sql)) {
$number = mysql_affected_rows($link);
}
echo "$number";
?>
echo $number;
Dit al geprobeerd?

Ozzie PHP op 25/01/2011 11:06:09

En zo?

$num_rows = mysql_affected_rows();


mysql_affected_rows vraagt inderdaad om de link van de database, maar bij een SELECT moet je die niet gebruiken, daar gebruik je mysql_num_rows
Ozzy sorry jouw comment probeerde ik als tweede. xD
Daarmee heb ik dit gemaakt: en volgens mij werkt het!

<?php
$username="root";
$password="";
$database="Wizzardz";

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");


$res = (mysql_query("INSERT INTO account (Nickname) VALUES ('pipah')"));

$num_rows = mysql_affected_rows();


if ($num_rows < 0) {
echo "bestaat wel";
} else {
echo "bestaat niet";
}
mysql_close();
?>

Reageren