【问题标题】:PHP PDO insert statement not going throughPHP PDO插入语句未通过
【发布时间】:2014-12-14 06:02:07
【问题描述】:

我正在构建一个 Web 应用程序,用户可以在其中创建新项目。

我已经处理了几天,我完全被难住了!
我有一个“新建项目”按钮,当您单击它时,它会调用一个 newProject 函数(并传递新项目所在文件夹的 ID。但这并不重要。)
这就是那个 javascript 函数的样子。

function newProject(parentFolder) {
    //this is here because the data type stored in the database is varchar and if the value is 'none' then there the project being created will bi in no folder.
    if(parentFolder != 'none') { //convert to nonstring
        var PF = parentFolder;
    }else {
        var PF = 'none';
    }

    //create the new project
    $.post('../../php/new_project.php', { parentFolder: PF, name: 'New Project' }, function(data) {
        alert(data);
    });

}

new_project.php文件连接正常,所有变量都通过。

这里是 new_project.php 文件

session_start();

    if(isset($_SESSION['username'])){
        $username = $_SESSION['username'];
        if(isset($_SESSION['name'])){
            $name = $_SESSION['name'];
        }
    }

if(isset($_POST['name'])) {

    $parentFolder = $_POST['parentFolder'];
    $name = $_POST['name'];
    $date = date('Y/m/d');
    $openId;
    for ($i=0;$i<10;++$i)
            $openId.= ($r=mt_rand(0,35))<26?chr(ord('a')+$r):chr(ord('0')+$r-26);

    $conn = new PDO('mysql:host=localhost;dbname=projects', "******", "*******");

    $sql = "INSERT INTO projects (id, ProjectName, creatorOfProject, public, lastEdited, openId, deleted, parentfolder, favorite) VALUES (:id, :ProjectName, :creatorOfProject, :public, :lastEdited, :openId, :deleted, :parentfolder, :favorite)";

    $query = $conn -> prepare($sql);
    $query -> execute(array(
        ":id"                               => '',
        ":ProjectName"          => $name,
        ":creatorOfProject" => $username,
        ":puclic"                       => '',
        ":lastEdited"               => $date,
        ":openId"                       => $openId,
        ":deleted"                  => '',
        ":parentfolder"         => $parentFolder,
        ":favorite"                 => ''
    ));

}else { 
    echo 'something went wront';
}

因为我正在警告从该文件传递的数据,所以它只会弹出一个空白警告框。 也没有javascript错误。

【问题讨论】:

  • :public":puclic" - 未设置错误异常,因此您不会收到通知。 setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) - 不要使用这个 echo 'something went wront'; - 使用 try/catch。

标签: javascript php jquery mysql pdo


【解决方案1】:

您有一个错字,但看起来您正在传递不需要的空字符串:

$sql = "INSERT INTO projects (id, ProjectName, creatorOfProject, public, lastEdited, openId, deleted, parentfolder, favorite) 
        VALUES (null, :ProjectName, :creatorOfProject, null, :lastEdited, :openId, null, :parentfolder, null)";

$query = $conn -> prepare($sql);
$query -> execute(array(
    ":ProjectName"          => $name,
    ":creatorOfProject" => $username,
    //":public"                       => '',
    //    ^ Typo was there.
    ":lastEdited"               => $date,
    ":openId"                       => $openId,
    ":deleted"                  => '',
    ":parentfolder"         => $parentFolder,
    ":favorite"                 => ''
));

我从您正在使用的数组/占位符中删除了其他空字符串,并在插入语句中将它们替换为 null

【讨论】:

  • 我应该澄清一下我传递的是空白字符串,因为数据库中已经有一个默认设置。
  • 传递null 仍将使用默认值,调试时可能更易于阅读。
  • @Kevin 即使您为某些传递了 NULL 值,但如果您的某个绑定有错字,您的代码也会因此而失败。另外,您不是在检查错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2012-12-16
  • 2017-09-05
  • 1970-01-01
  • 2016-02-02
  • 2012-05-05
  • 2014-08-12
相关资源
最近更新 更多