PHP mysql script
"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in "url" "
Code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
$username="geenusername";
$password="geenwachtwoord";
$database="geendb";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$insertquery=$_POST['query'];
mysql_query($insertquery);
$result= mysql_query($insertquery);
$num= mysql_num_rows($result);
$i=0;
while ($i < $num) {
echo mysql_result($result, $i);
echo "<br>";
$i++;
}
?>
$username="geenusername";
$password="geenwachtwoord";
$database="geendb";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$insertquery=$_POST['query'];
mysql_query($insertquery);
$result= mysql_query($insertquery);
$num= mysql_num_rows($result);
$i=0;
while ($i < $num) {
echo mysql_result($result, $i);
echo "<br>";
$i++;
}
?>
Alvast bedankt
Gewijzigd op 26/12/2012 11:23:13 door David Waijers
mysql_affected_rows.
Tevens moet je dus ALTIJD na het uitvoeren van een query controleren dat je een resultset terugkrijgt, of dat je een false terugkrijgt indien je query is mislukt. Het is een fout om ervanuit te gaan dat het altijd maar goed gaat. En dit geldt overigens voor nagenoeg alle mysql_xxxx functies die een resource zouden moeten teruggeven.
Dat klopt. Als je een insert, update of delete (en zo zijn er nog een paar) uitvoert krijg je geen resultset en kan je dus ook niet het aantal opgehaalde rijen opvragen. Wat je wel kunt doen is het aantal 'affected rows' opvragen met Tevens moet je dus ALTIJD na het uitvoeren van een query controleren dat je een resultset terugkrijgt, of dat je een false terugkrijgt indien je query is mislukt. Het is een fout om ervanuit te gaan dat het altijd maar goed gaat. En dit geldt overigens voor nagenoeg alle mysql_xxxx functies die een resource zouden moeten teruggeven.
Gewijzigd op 25/12/2012 21:59:18 door Erwin H
Erwin H op 25/12/2012 21:58:59:
Dat klopt. Als je een insert, update of delete (en zo zijn er nog een paar) uitvoert krijg je geen resultset en kan je dus ook niet het aantal opgehaalde rijen opvragen. Wat je wel kunt doen is het aantal 'affected rows' opvragen met mysql_affected_rows.
Tevens moet je dus ALTIJD na het uitvoeren van een query controleren dat je een resultset terugkrijgt, of dat je een false terugkrijgt indien je query is mislukt. Het is een fout om ervanuit te gaan dat het altijd maar goed gaat. En dit geldt overigens voor nagenoeg alle mysql_xxxx functies die een resource zouden moeten teruggeven.
Tevens moet je dus ALTIJD na het uitvoeren van een query controleren dat je een resultset terugkrijgt, of dat je een false terugkrijgt indien je query is mislukt. Het is een fout om ervanuit te gaan dat het altijd maar goed gaat. En dit geldt overigens voor nagenoeg alle mysql_xxxx functies die een resource zouden moeten teruggeven.
Hoe zou ik heb kunnen implementeren in het script?
mvg David Waijers
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$result = mysql_query($insertquery);
if ( $result === false ){
//doe iets met het feit dat er een fout is
} else {
$num = mysql_num_rows($result);
}
?>
$result = mysql_query($insertquery);
if ( $result === false ){
//doe iets met het feit dat er een fout is
} else {
$num = mysql_num_rows($result);
}
?>
Dit is de situatie voor normale queries, waarbij je een resultset verwacht. Verwacht je dat niet, of weet je het niet van te voren dan kan je dit doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$result = mysql_query($insertquery);
if ( $result === false ){
//doe iets met het feit dat er een fout is
} elseif( $result === true ) {
$num = mysql_affected_rows();
} else {
$num = mysql_num_rows($result);
}
?>
$result = mysql_query($insertquery);
if ( $result === false ){
//doe iets met het feit dat er een fout is
} elseif( $result === true ) {
$num = mysql_affected_rows();
} else {
$num = mysql_num_rows($result);
}
?>
Eenzelfde constructie kan je bij de andere mysql functies gebruiken waar je of een boolean, of een resource terugkrijgt. Klik op de functie in je eerste post om direct naar de php manual te gaan waar je er meer over kunt lezen.
Let overigens op dat in jouw code je de query twee keer uitvoert, op regel 11 en nog een keer op regel 14.
Dus kan je deze even aanpassen naar je vraagstelling? Alvast bedankt.