微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP准备查询的奇怪行为

如何解决PHP准备查询的奇怪行为

我使用以下代码数据库建立连接:

<?PHP
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mysb";

// Create connection
$conn = new MysqLi($servername,$username,$password,$dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection Failed: " . $conn->connect_error);
}

?>

然后,我尝试从另一个PHP页面执行此语句,并且仅当在另一个select语句之前对update语句进行编码时,它才有效:

<?PHP
  require_once (getcwd()."connection.PHP");    

  function callme(){
    if (isset($_GET['check'])) {
      $ip = $_SERVER['REMOTE_ADDR'];
      $sql = "UPDATE Table SET IpAddress = ? WHERE Key = ?";
      $stmt = $GLOBALS['conn']->prepare($sql);
      //if (!$stmt)
        //die("Error occurred");
      $stmt->bind_param("ss",$ip,$g);
      $stmt->execute();
    }
  }
    
  if (isset($_GET['g']) && !empty($_GET['g'])){
    $g = $_GET['g'];

    callme(); //called before the select statement below

    $sql = "SELECT T FROM Table WHERE Key = ?";
    $stmt = $GLOBALS['conn']->prepare($sql);
    //if (!$stmt)
      //die("Error occurred");
    $stmt->bind_param("s",$g);
    $stmt->execute();
    $stmt->bind_result($result);
    $stmt->fetch();
   }
?>

这正常工作。 ps:所有查询都是正确的,并且已经过手动测试。 奇怪的是,如果我尝试在callme()语句之后像这样调用select函数

<?PHP
  require_once (getcwd()."connection.PHP");    

  function callme(){
    if (isset($_GET['check'])) {
      $ip = $_SERVER['REMOTE_ADDR'];
      $sql = "UPDATE Table SET IpAddress = ? WHERE Key = ?";
      $stmt = $GLOBALS['conn']->prepare($sql);
      //if (!$stmt)
        //die("Error occurred");
      $stmt->bind_param("ss",$g);
      $stmt->execute();
    }
  }
    
  if (isset($_GET['g']) && !empty($_GET['g'])){
    $g = $_GET['g'];
  
    $sql = "SELECT T FROM Table WHERE Key = ?";
    $stmt = $GLOBALS['conn']->prepare($sql);
    //if (!$stmt)
      //die("Error occurred");
    $stmt->bind_param("s",$g);
    $stmt->execute();
    $stmt->bind_result($result);
    $stmt->fetch();

    callme();//called after the select statement above

   }
?>

我收到以下错误Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in /Users/user/Sites/test.PHP:13 Stack trace: #0 /Users/user/Sites/test.PHP(32): callme() #1 {main} thrown in /Users/user/Sites/test.PHP on line 12

第12行正好是$stmt->bind_param("ss",$g);。 我在这里想念什么?

解决

对于那些试图解决此问题的人,只需添加

$stmt->free_result();

您的陈述后。已经回答并建议重复的问题有点离题。请查看PHP Commands Out of Sync errorhttps://dba.stackexchange.com/questions/130019/commands-out-of-sync-you-cant-run-this-command-now以获得更好的理解。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。