如果存在则如何更新,否则在php mysql中插入[重复]

Posted

技术标签:

【中文标题】如果存在则如何更新,否则在php mysql中插入[重复]【英文标题】:how to update if exist else insert in php mysql [duplicate] 【发布时间】:2017-04-19 10:48:07 【问题描述】:

如果 ID 已经存在,我想更新我的数据库,如果 ID 不存在,则插入。

process.php:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "maindata";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) 
 die("<center>Connection failed: " . mysqli_connect_error() . "</center");
     

$id = $_POST['id'];   
$aname = $_POST['aname'];   
$xsummary = $_POST['xsummary'];

$sql=mysql_query("SELECT * FROM info WHERE ID = $id");

if (mysql_num_rows($sql) == $id) 

 $sql="update info set AccountName= '$aname', ExecutiveSummary='$xsummary'";
 
else 
 $sql="insert into AccountName= '$aname', ExecutiveSummary= '$xsummary'";

有人帮我解决我的问题。

提前致谢。

【问题讨论】:

你能给我一个关于如何使用 INSERT IGNORE ... ON DUPLICATE KEY UPDATE 的例子...我只是 php 的新手,还在看教程 您的代码很容易受到 SQL 注入攻击! xkcd.com/327 永远不要使用用户提供的输入来构建 SQL 查询字符串。您应该改用准备好的语句。 php.net/manual/en/mysqli.quickstart.prepared-statements.php 我应该如何改进我的代码并忽略 SQL 注入攻击 【参考方案1】:

一切都好需要更换 这个

    if (mysql_num_rows() == $id) 
    
     $sql="update info set AccountName= '$aname', ExecutiveSummary='$xsummary'";
     

mysql_query($sql);
if (mysql_num_rows()>0) 

 $sql="update info set AccountName= '$aname', ExecutiveSummary='$xsummary' where ID= $id";
  

【讨论】:

有一个警告错误:mysql_num_rows() 需要 1 个参数,2 在 C:\wamp64 中给出 更新的答案将解决问题。 @joneltimblaco 仍然有 3 个错误警告:mysqli_query() 需要至少 2 个参数,1 个在 C 中在 $sql=mysqli_query 中给出,警告:mysqli_query() 需要至少 2 个参数,1 个在 C 中给出mysqli_query($sql);和警告:mysqli_num_rows() 只需要 1 个参数,0 在 C 中的 if (mysqli_num_rows【参考方案2】:

尝试这样的事情

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "maindata";
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
    if (!$conn) 
     die("<center>Connection failed: " . mysqli_connect_error() . "</center");
         

    $id = $_POST['id'];   
    $aname = $_POST['aname'];   
    $xsummary = $_POST['xsummary'];

    $sql=mysql_query("SELECT * FROM info WHERE ID = $id");
    $result = mysqli_query($conn, $sql);
    $count=mysql_num_rows($result);
    if ($count > 0) 
    
      $sql="update info set AccountName= '$aname',  ExecutiveSummary='$xsummary' where ID =".$id;
     
    else 
     $sql = "INSERT INTO info ('AccountName', 'ExecutiveSummary')
VALUES ('$aname', '$xsummary')";

    

【讨论】:

有一个警告错误:mysql_num_rows() 需要 1 个参数,2 在 C:\wamp64 中给出 我已经更新了我的anwser 请再次查看 仍然有 3 个错误警告:mysqli_query() 需要至少 2 个参数,1 个在 $sql=mysqli_query 中的 C:\wamp64 中给出,警告:mysqli_query(): $result 中的 C 中的空查询和警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,$count 中 C 中给出的布尔值【参考方案3】:

试试下面的代码

$sql        = @mysql_query("SELECT * FROM info WHERE ID = $id");
$num_rows   = @mysql_num_rows($sql);
if ($num_rows > 0) 
    //update query
    $sql="update info set AccountName= '$aname', ExecutiveSummary='$xsummary'";
 else 
    //insert query
    $sql = "INSERT INTO info ('AccountName', 'ExecutiveSummary')
    VALUES ('$aname', '$xsummary')";

【讨论】:

插入数据库时​​出错。: INSERT INTO info ---- SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法 ID是主键还是其他什么? $sql="insert into info AccountName= '$aname', ExecutiveSummary= '$xsummary'"; 表名丢失 表名是 info【参考方案4】:

您可以使用 INSERT ... ON DUPLICATE KEY UPDATE...

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "maindata";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) 
    die("<center>Connection failed: " . mysqli_connect_error() . " </center");
     
$id = isset($_POST['id']) && $_POST['id'] ? $_POST['id'] : 0;   
$aname = $_POST['aname'];   
$xsummary = $_POST['xsummary'];

$stmt=mysqli_prepare($conn, "INSERT into info (`ID`, `AccountName`, `ExecutiveSummary`)
    VALUES (?, ?, ?)
    ON DUPLICATE KEY UPDATE 
    `AccountName`=VALUES(`AccountName`),
    `ExecutiveSummary`=VALUES(`ExecutiveSummary`)
");
mysqli_stmt_bind_param($stmt, 'iss', $id, $aname, $xsummary);
mysqli_stmt_execute($stmt);

我在这里添加了参数绑定供大家学习。不要将来自输入的信息直接插入到查询中。它不安全。

【讨论】:

有一个错误警告:mysqli_stmt_bind_param() 期望参数 1 是 mysqli_stmt,在 mysqli_stmt_bind_param($stmt, 'iss', $aname, $xsummary) 中的 C:\wamp64 中给出的布尔值;和 mysqli_stmt_execute($stmt); 更新的代码...在绑定上添加了 $id...带有该警告,您需要对 mysql 连接进行故障排除... 还是有错误,--Error Inserting into the database.: Query was empty--【参考方案5】:

请看下面的代码。

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "maindata";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) 
    die("<center>Connection failed: " . mysqli_connect_error() . "</center");
     

$id = $_POST['id'];   
$aname = $_POST['aname'];   
$xsummary = $_POST['xsummary'];

$sql=mysqli_query($conn, "SELECT * FROM info WHERE ID = $id");

if (mysqli_num_rows($sql) > 0) 

    $sqlUpdate="update info set AccountName= '$aname', ExecutiveSummary= '$xsummary'";
    mysqli_query($conn,$sqlUpdate);
 else 
    $sqlInsert="insert into info set AccountName= '$aname', ExecutiveSummary= '$xsummary'";
    mysqli_query($conn,$sqlInsert);

您在代码中的实际问题,您是使用 mysqli 连接数据库,但使用 mysql 从表中获取数据。请使用此代码,它将正常工作。

*注意:-插入语句中有错误,请更新,这将起作用。

【讨论】:

感谢更新工作正常,但如果数据库中不存在 id,则 sqlInssert 无法正常工作......向你竖起大拇指 你好 Jonel,插入语句有错误,请更新,这会起作用。 先生仍然无法插入我还在 AccountName 之前添加了“set”...我认为 $sqlInsert 中缺少表名...但我已经添加了表名但仍然没有工作

以上是关于如果存在则如何更新,否则在php mysql中插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果已存在则更新行,否则使用 mysql 在表中插入新记录

SQL 查询 - 如果存在则更新,否则插入

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

mysql 表中数据不存在则插入,否则更新数据

如果存在如何更新,否则插入新文档?

如果存在如何更新,否则插入新文档?