mysqli_num_行在mysqli和PHP中不起作用

mysqli_num_行在mysqli和PHP中不起作用,php,mysql,mysqli,Php,Mysql,Mysqli,在插入新记录之前,我想检查是否已经存在记录。但到目前为止还不起作用,下面是脚本: <?php session_start(); $uname = $_SESSION['username']; $friend = $_GET["newfriend"]; $db = new mysqli("localhost", "...", "....", "..."); if($db->connect_errno > 0){ die("Unable to connect to dat

在插入新记录之前,我想检查是否已经存在记录。但到目前为止还不起作用,下面是脚本:

<?php
session_start();
$uname = $_SESSION['username'];
$friend = $_GET["newfriend"];

$db = new mysqli("localhost", "...", "....", "...");
if($db->connect_errno > 0){
    die("Unable to connect to database: " . $db->connect_error);
}

$checkexist = $db->query("SELECT * FROM friends WHERE (username_own='$uname', username='$friend')");

//create a prepared statement
$stmt = $db->prepare("INSERT INTO friends (`username_own`, `username`) VALUES (?,?)");

//bind the username and message
$stmt->bind_param('ss', $uname, $friend);

if ($checkexist->mysqli_num_rows == 0) {
  //run the query to insert the row
  $stmt->execute();
}
试试这个:

//create a prepared statement
$stmt = $db->prepare("INSERT INTO friends (`username_own`, `username`) VALUES (?,?)");

//bind the username and message
$stmt->bind_param('ss', $uname, $friend);

if ($checkexist->mysqli_num_rows == 0 || $checkexist->mysqli_num_rows <> 0) {
  //run the query to insert the row
  $stmt->execute();
}
//创建一个准备好的语句
$stmt=$db->prepare(“插入到朋友(`username\u own`,`username`)值(?,)”;
//绑定用户名和消息
$stmt->bind_参数('ss',$uname,$friend);
如果($checkexist->mysqli|u num_行==0 | |$checkexist->mysqli_num_行0){
//运行查询以插入行
$stmt->execute();
}

尝试以下方法:

<?php

/* Check if user exists */
$query = "SELECT count(1) FROM friends WHERE username_own=? AND username=?";

if($stmt = $db->prepare($query)){
  $stmt->bind_param('ss', $uname, $friend);
  $stmt->execute();
  $stmt->bind_result($count_rows);
  $stmt->fetch();
  $stmt->close();
}else die("Failed to prepare");

/* If user doesn't exists, insert */
if($count_row == 0){

    $query = "INSERT INTO friends (`username_own`, `username`) VALUES (?,?)";

    if($stmt = $db->prepare($query)){
      $stmt->bind_param('ss', $uname, $friend);
      $stmt->execute();
      $stmt->close();
    }else die("Failed to prepare!");
}

$checkexist->mysqli\u num\u rows
错误。只是

$checkexist->num_rows
或者你可以使用

mysqli_num_rows($checkexist)

希望这有帮助。

用一个简单的
插入忽略…
插入。。。在重复密钥更新时…


后者允许您在记录已存在(基于任何主键或唯一键)时更改列。

WHERE(username_own='$uname',username='$friend')
err。。。那是错误的。它可以是
。为什么不直接使用
INSERT IGNORE
?如果有重复的,它将跳过插入。请小心准备任何和所有涉及用户数据的查询。就在这里,你的代码非常糟糕,可能会毁了你的整个服务。正确准备这两个查询。使用外部变量构建SQL语句会使代码容易受到SQL注入攻击。此外,任何带有单引号的输入数据,如“O'Malley”,都会破坏您的查询。了解参数化查询,最好使用PDO模块,以保护您的web应用程序。有很多详细的例子。另请参见备选方案和危险解释。“每一个好的答案都会得到一块美味的饼干:)”-我宁愿有一个果酱
$\u会话
♫ 谢谢。@Fred ii-哦,我本想改变的,谢谢你修好了。但另一件事是,很难说OP是想同时检查这两种情况还是其中一种。所以它也可以是
。但是,我们会等着看OP会说些什么,cheers@Arian你的脚本中有一些小错误,但现在可以了:)谢谢!对于将来的读者,请删除以下行:
$stmt->bind_param()
并在此处添加分号:
$stmt->close()这是cookie 0=)@mmibm我处理好了,谢谢你指出这一点。我也能吃一块饼干吗?;-)@Fred-ii-当然你可以有一个-这是你写的cookie
if($checkexist->mysqli_num_rows==0 | |$checkexist->mysqli_num_rows 0)
。为什么不直接使用
if(true)
,因为它会有相同的结果(当然,删除if块也是如此)。