如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?

Posted

技术标签:

【中文标题】如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?【英文标题】:How do I generate a javascript alert if the record already exists OR if it does not exist in a PDO MySQL insert query? 【发布时间】:2014-11-10 06:34:15 【问题描述】:

我有一个 mysql 数据库,我想使用 PDO 连接从 php 表单插入数据。

有没有办法在以下情况下弹出 javascript 警报;

    记录已存在或 已添加,因为它不存在

我正在使用此代码;

$dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $category = $_REQUEST['category'];
     $sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
     $sql = $dbo->prepare($sql);
     $sql ->execute(
        array(
           ':category'=>$category
           )
        );

感谢您帮助新手(我寻找了现有的答案,但似乎没有合适的答案)。

【问题讨论】:

您至少应该指定此 PHP 代码如何与您的客户端部分通信。它来自 AJAX 调用,还是稍后输出 html 将表中的类别column设置为UNIQUE 我猜你没有看到你在从服务器端谈论客户端系统...... 为什么需要负 1,我很具体,我不能只是寻求帮助而不必被告知我用你的非技术方式提问是垃圾吗? 其实很简单,只要获取受影响的行,这将是您的警报消息的基础 【参考方案1】:

其实很简单。只需通过->rowCount()检查受影响的行:

$sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
$stmt = $dbo->prepare($sql);
$stmt->execute(array(':category'=>$category));

if($stmt->rowCount() > 0) 
    // inserted
    echo '<script>alert("Insert Complete!");</script>';
 else 
    // did not insert
    echo '<script>alert("Record already exists!");</script>';

根据您的代码现在的设置方式,这是您可以用来提醒插入状态的最接近的方式。

当然,如果您使用 ajax 来实际请求此插入,您可以只用一个布尔值进行响应,然后通过 ajax 的成功块将其呈现在客户端上。

【讨论】:

当然 @JohnD 很高兴它确实有帮助【参考方案2】:
$dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $category = $_REQUEST['category'];
 $sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
 $sql = $dbo->prepare($sql);
 try 
 $sql ->execute(
    array(
       ':category'=>$category
       )
    );
 catch(Exception $ex) 
     print_r($ex);
 

由于您已在字段上添加了唯一约束并要求 PDO 处理异常错误,如果数据已在 DB 中,PDO 应在尝试插入数据时引发异常。 你可以用echo "alert('My error message');"代替print_r()

【讨论】:

我试过你的,它不喜欢'catch(Exception $ex) '这一行【参考方案3】:

例如,这需要转换为 PDO 才能回答问题。

// $link = mysqli_connect blah blah

function check_exist($link, $cat) 

    $query = "SELECT `category` FROM `category` WHERE `category` = '$cat'";
    $result = mysqli_query($link, $query) or die(mysqli_query($link));

    $row = mysqli_fetch_num($result);

    if(count($row) >= 1) 
        <script>alert('Row already exists!');
     else 
        insert_record($link, $cat); //fire the insert function
        <script>alert('New record added!');
    



function insert_record($link, $cat) 
    $cat = mysqli_real_escape_string($link, $cat);
    $query = "INSERT INTO `category` (`category`) VALUES ('$category')";
    mysqli_query($link, $query) or die(mysqli_query($link));

【讨论】:

以上是关于如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql插入数据:不存在则插入,存在则跳过或更新

JAVA中,向MYSQL插入多条数据,如何判断如果某记录已经存在就不插入

[PDO如果ID存在,则在更新时插入MySQL

Mysql触发器插入记录或更新,如果它已经存在? [复制]

mysql:如果不存在则插入记录,否则返回记录的ID

pdo 增删改查