下面的代码按预期工作。它将3个条目添加到表“keywords”中。

<?php
include "config.php";
try{
    // $conn = new PDO(DBINFO,USER,PASS);
    // $sql = "INSERT INTO projects (title,duration, startyear, description, tags,email) VALUES (:title,:duration, :startyear, :description, :tags,:email)";
    // $stmt = $conn->prepare($sql);
    // $stmt->bindParam(':title', $_POST['title'],PDO::PARAM_STR);
    // $stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
    // $stmt->bindParam(':duration', $_POST['duration'], PDO::PARAM_STR);
    // $stmt->bindParam(':startyear', $_POST['startyear'], PDO::PARAM_STR);
    // $stmt->bindParam(':description', $_POST['description'], PDO::PARAM_STR);
    // $stmt->bindParam(':tags', $_POST['tags'], PDO::PARAM_STR);
    // $stmt->execute();

    for($i=0; $i<3; $i++){
        $conn2 = new PDO(DBINFO,USER,PASS);
        $sql2 = "INSERT INTO keywords (keyword,confidence) VALUES (:keyword,:confidence)";
        $stmt2 = $conn2->prepare($sql2);
        $a = 'asdfds';
        $stmt2->bindParam(':keyword', $a,PDO::PARAM_STR);
        $stmt2->bindParam(':confidence', $a, PDO::PARAM_STR);
        $stmt2->execute();
    }
}
catch(PDOException $pe){
    die("Could not connect to the database :".$pe->getMessage());
}
?>

但是,当我运行下面的代码(在这里我取消了第一部分的注释)时,条目会被添加到“keywords”表中6次。
<?php
include "config.php";
try{
    $conn = new PDO(DBINFO,USER,PASS);
    $sql = "INSERT INTO projects (title,duration, startyear, description, tags,email) VALUES (:title,:duration, :startyear, :description, :tags,:email)";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':title', $_POST['title'],PDO::PARAM_STR);
    $stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
    $stmt->bindParam(':duration', $_POST['duration'], PDO::PARAM_STR);
    $stmt->bindParam(':startyear', $_POST['startyear'], PDO::PARAM_STR);
    $stmt->bindParam(':description', $_POST['description'], PDO::PARAM_STR);
    $stmt->bindParam(':tags', $_POST['tags'], PDO::PARAM_STR);
    $stmt->execute();

    for($i=0; $i<3; $i++){
        $conn2 = new PDO(DBINFO,USER,PASS);
        $sql2 = "INSERT INTO keywords (keyword,confidence) VALUES (:keyword,:confidence)";
        $stmt2 = $conn2->prepare($sql2);
        $a = 'asdfds';
        $stmt2->bindParam(':keyword', $a,PDO::PARAM_STR);
        $stmt2->bindParam(':confidence', $a, PDO::PARAM_STR);
        $stmt2->execute();
    }
}
catch(PDOException $pe){
    die("Could not connect to the database :".$pe->getMessage());
}
?>

我不明白。有什么帮助吗?

最佳答案

为什么首先要创建到同一服务器和架构的4个不同连接?
循环创建连接,并在重写对语句和连接的引用时自动关闭它们。
但是,循环之前的原始连接将保持打开状态,并为语句重用。如果在循环之前创建第三个连接而不关闭它,那么最终将得到9个条目。
因此,如果不再需要对连接对象的引用(包括相关的语句),请将其删除。
或者更好的方法是重用连接,而不是为每个语句创建新的连接。

关于php - php的神秘行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45526614/

10-11 21:33