如果存在则如何更新,否则在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中插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章