【问题标题】:PHP affected_rows return 0 but query executesPHP 影响行返回 0 但查询执行
【发布时间】:2019-05-05 03:34:09
【问题描述】:

我有一个对表进行更新的函数,调用它后我检查表并且行已更改,但函数返回“更新时出错”而不是“医生占用”。这是我的功能。

function funcion(){
    $con = new Conexion();
   $con->conecta();

   $sql = “SELECT * FROM llamada WHERE id_llamada = $id_llamada AND id_medico = $id_medico”;
   $res = $con->consulta($sql);
   if ($res->num_rows > 0) {
     $sql = “UPDATE medico SET disponible = 1 WHERE id_medico = $id_medico”;
     $con->consulta($sql);
     // var_dump($con->mysqli->affected_rows);
     if ($con->mysqli->affected_rows() > 0) {
       return [true,‘Doctor occupied’];
     }else{
       return [false,‘Error at update’,$con->mysqli];
     }
   }else{
     return [false,‘Data doesn't match’];
   }
}

函数 conecta() 与 mysql 进行连接。

这是课程。

class Conexion {
    public $mysqli;

    public function conecta(){
        $this->mysqli = new mysqli(‘SERVER’, ‘USER’, ‘PASSWORD’, ‘DATABASE’);
        if ($this->mysqli->connect_errno) {
           echo “Fallo al conectar a MySQL: (” . $this->mysqli->connect_errno . “) ” . $this->mysqli->connect_error;
        }
        //echo $this->mysqli->host_info . “<br>“;
    }

    public function desconecta(){
        $this->mysqli->close();
    }

    public function consulta($sql) {
        $resultado = $this->mysqli->query($sql);
        if (!$resultado) {
            echo “Error en la consulta <br>“;
        }
        if (is_null($resultado)){
            echo “sin resultados”;
        }else{
            return $resultado;
        }
    }
}

【问题讨论】:

  • 那么$con-&gt;consulta($sql); 是做什么的?
  • 你能分享更多的上下文吗?我们怎么知道$con内部发生了什么?
  • 此代码不可能如图所示运行。它包含许多大引号。
  • 你在哪里设置$id_medico$id_llamada
  • 问题:您知道affected_rows 返回0,如果更新有效,但值没有改变? (即如果disponible 已经是1?)

标签: php mysql sql oop


【解决方案1】:

假设$con-&gt;mysqli 是连接句柄,affected_rows 是属性而不是方法。所以你的线...

if ($con->mysqli->affected_rows() > 0) {

应该是

if ($con->mysqli->affected_rows > 0) {

你是如何使用它的...

// var_dump($con->mysqli->affected_rows);

【讨论】:

  • 你需要分享Conexion的代码,否则都是猜测。
  • 我刚加了。
【解决方案2】:

mySqli 提供了两个接口,一个是面向对象的,另一个是过程的。在面向对象的方式下,affected_rows 确实是 mySqli 对象的一个​​属性。但是,如果您更喜欢使用过程编码,那么可以使用函数 mysqli_affected_rows () ,它需要一个 $link 参数(请参阅更多信息 here)。

程序选项的示例:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
// code for a SELECT, INSERT, UPDATE, REPLACE, or DELETE query
printf("Affected rows: %d\n", mysqli_affected_rows($link) );

注意:您还可以找到关于程序样式的好教程here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2015-04-15
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    相关资源
    最近更新 更多