sql >> Databasteknik >  >> RDS >> Mysql

Kan inte få antalet rader och hämta när du använder MySQLi-förberedd sats

Om du vill använda mysqli_stmt::$num_rows (det vill säga kontrollera antalet rader på det förberedda uttalandet), du måste använda $stmt->store_result() efter att ha kört den förberedda satsen innan man kan kontrollera antalet rader. Det betyder att resultatet lagras i minnet innan vi kontrollerar hur många rader som returnerades.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
    // ...

Men om du vill använda mysqli_result::$num_rows (på MySQLi-resultatet konverterar du från satsresultatet), måste du göra det efter att ha gjort $result = $stmt->get_result(); , och använd $result->num_rows; , som visas nedan.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
    while ($row = $result->fetch_assoc()) {
    // ....

I slutändan bör de båda sluta göra samma sak - ange ett antal av raderna som returneras av den ursprungliga förberedda frågan.

Obs
Det är viktigt att notera att du inte kan använda store_result() och get_result() på samma uttalande. Vilket betyder att i det första exemplet kan du inte konvertera till ett mysqli-result-objekt (genom att använda get_result() , som låter dig använda standarden fetch_assoc() metod). Som store_result() lagrar resultatet i minnet, det finns inget för get_result() att konvertera och vice versa.

Detta betyder att om du använder store_result() , måste du hämta genom statement-fetch, mysqli_stmt::fetch() och binda resultaten genom mysqli_stmt::bind_result() . Om du använder get_result() , bör du kontrollera antalet rader på det resulterande MySQLi-result-objektet (som visas i det andra exemplet).

Du bör därför konstruera din kod så att du bara behöver använda en av dem.

Som sagt, med affected_rows som föreslås i kommentarerna, är inte rätt verktyg för jobbet - enligt manualen på mysqli_stmt::$affected_rows (samma sak gäller för en vanlig fråga, mysqli::$affected_rows ):




  1. Använder funktionen COALESCE för att göra värden separerade med kommatecken

  2. Allvarligt fel:Anrop till en medlem funktion query() på null

  3. php include-felet hittar inte sökvägen

  4. SQL :MELLAN vs <=och>=