2014-10-18 112 views
0

我有一个Web应用程序,我正在建立一个用户能够创建一个新项目。PHP PDO插入语句不通过

我已经处理了几天,我完全难住!
我有一个“新建项目”按钮,当你点击它时,它会调用一个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错误。

+0

':public'和'“:puclic”' - 错误异常没有设置,所以你没有收到通知。 'setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION)' - 不要使用这个'echo'事情发生了;' - 使用try/catch。 – 2014-10-18 23:31:02

回答

0

你有一个错字,但它也像你逝去的一些并不需要的空字符串:

$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

+0

我应该澄清,因为数据库中已经有一个默认设置,所以我传递了空白字符串。 – Kevin 2014-10-18 23:35:22

+0

传递'null'仍将使用默认值,并且在调试时可能更易于阅读。 – Fluffeh 2014-10-18 23:36:37

+0

@Kevin即使你为某些传递NULL值,如果你的一个绑定有一个错字,你的代码也会因为它而失败。另外,你不检查错误。 – 2014-10-18 23:37:58