BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> MYSQL num rows не връща правилен резултат, MYSQL, PHP
cpuin
Публикувано на: 17-11-2021, 17:02
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 909
Регистриран на: 06.03.12



Здравейте,

Нямам идея защо, но mysqli_stmt_num_rows връща винаги 0.
Пробвах SQL заявката директно и връща 1 ред.

Четох какво ли не, пише, че трябва да се ползва
mysqli_stmt_store_result($stmt);

ползвам го, но пак не ще

CODE

....

if($stmt = mysqli_prepare($link, $sql)){
           // Bind variables to the prepared statement as parameters
           mysqli_stmt_bind_param($stmt, "s", $param_username);
           
           // Set parameters
           $param_username = $username;
           
           // Attempt to execute the prepared statement
           if(mysqli_stmt_execute($stmt)){
                  
               // Store result
               mysqli_stmt_store_result($stmt);
               
               // Check if username exists, if yes then verify password
               
               echo(mysqli_stmt_num_rows($stmt));
               
               if(mysqli_stmt_num_rows($stmt) == 1){                    
                   // Bind result variables
                   mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
                   if(mysqli_stmt_fetch($stmt)){

....


--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
relax4o
Публикувано на: 17-11-2021, 19:12
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2627
Регистриран на: 04.04.07



А заявката каква е?


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
thrawn
Публикувано на: 18-11-2021, 08:49
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3224
Регистриран на: 17.01.17



То не е само до заявка, а и какво има в това username...

@cpuin, защо изобщо използваш процедурен стил? Използвай ООП за да избегнеш предаването на "котекстните" променливи.
PMEmail Poster
Top
cpuin
Публикувано на: 18-11-2021, 11:14
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 909
Регистриран на: 06.03.12



@thrawun Винаги съм писал ОО, но сега правя нещо малко и съм го почнал процедурно.

Ето го кода със заявката, както писах, като я изпълня в MSQL връща един ред както си трябва, но mysqli_stmt_num_rows връща 0 icon_sad.gif

CODE

// Check if password is empty
   if(empty(trim($_POST["password"]))){
       $password_err = "Моля въведете парола.";
   } else{
       $password = trim($_POST["password"]);

   }
   
   // Validate credentials
   if(empty($username_err) && empty($password_err)){
       // Prepare a select statement
       $sql = "SELECT ID, Name, Password FROM users WHERE Name = ?";
       
       if($stmt = mysqli_prepare($link, $sql)){
           // Bind variables to the prepared statement as parameters
           mysqli_stmt_bind_param($stmt, "s", $param_username);
           
           // Set parameters
           $param_username = $username;
           
           // Attempt to execute the prepared statement
           if(mysqli_stmt_execute($stmt)){
                  
               // Store result
               mysqli_stmt_store_result($stmt);
               
               // Check if username exists, if yes then verify password
               
               echo(mysqli_stmt_num_rows($stmt));
               
               if(mysqli_stmt_num_rows($stmt) == 1){                    
                   // Bind result variables
                   mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
                   if(mysqli_stmt_fetch($stmt)){

....



--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
thrawn
Публикувано на: 18-11-2021, 11:19
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3224
Регистриран на: 17.01.17



Дай целия код, казах ти, че не се вижда какво има в username.
PMEmail Poster
Top
cpuin
Публикувано на: 18-11-2021, 12:38
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 909
Регистриран на: 06.03.12



QUOTE (thrawn @ 18-11-2021, 11:19)
Дай целия код, казах ти, че не се вижда какво има в  username.


CODE

// Check if username is empty
   if(empty(trim($_POST["username"]))){
       $username_err = "Моля въведете потребителско име.";
   } else{
       $username = trim($_POST["username"]);
   }


--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
thrawn
Публикувано на: 18-11-2021, 13:11
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3224
Регистриран на: 17.01.17



Грешката е в кода който упорито криеш, но аз не смятам да продължавам да си губя времето с теб, след като отказваш да съдействаш.
PMEmail Poster
Top
relax4o
Публикувано на: 18-11-2021, 19:34
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2627
Регистриран на: 04.04.07



Сега да питаме какво има в $_POST['username'] ли? Много трудно правите нещата понякога.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
PxL
Публикувано на: 19-11-2021, 04:01
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3532
Регистриран на: 26.04.05



CODE

...
          $username = trim($_POST["username"]);
...


QUOTE

...
           mysqli_stmt_bind_param($stmt, "s", $param_username);
...


ПП. Като цяло колегите са прави, давай целият код, по-бързо се намира грешката.


Това мнение е било редактирано от PxL на 19-11-2021, 04:02


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 19-11-2021, 06:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3224
Регистриран на: 17.01.17



Не е в това проблема. mysqli_stmt_bind_param приема, като параметри, адреси на променливи които се използват чак в mysqli_stmt_execute. А той задава стойност на param_username между извикванията на двете функции.

Като цяло, в показания код няма грешка и рой си работи. С други думи, или данните ги няма в базата данни или нещо друго не е на ред.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0