PDO准备声明失败

时间:2015-06-09 22:51:15

标签: php mysql pdo

我有这个代码在我的php文件上连接mysql:

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

    function setPerson($nam, $last_n1,$last_n2, $date_birth) { //We pass all dates of the person
        include "conexion.php";
        $id_family=5;
        $id_user=1;
        $query = $conexion->prepare("INSERT INTO person (name, last_name1, birth_date, family_id, user_id) VALUES (name= :nam, last_name1= :last_n1,family_id=:id_family,user_id=:id_user)");
$params = array(":nam"=>$nam,":last_n1"=>$last_n1,":d_b"=>$date_birth,":id_family"=>$id_family,":id_user"=>$id_user);

 setPerson($_POST['name'],$_POST['last_name1'],$_POST['last_name2'],$_POST['d_birth']);
}

我从主文件的ajax中获取数据,我检查过它是否正确发送了值。绝对是值得的。 它不起作用,因为查询没有取值,它没有进行赋值,结果sql是这样的:

INSERT INTO person (name, last_name1, birth_date, family_id, user_id) VALUES (name= :nam, last_name1= :last_n1,family_id= :id_family, user_id= :id_user);

但它应该是(例如):

INSERT INTO person (name, last_name1, birth_date, family_id, user_id) VALUES ('jon', 'snow','1990-12-1',5, 1);

我尝试手动插入值并且它有效,我不知道它为什么不采用这些值。

1 个答案:

答案 0 :(得分:2)

根据original post的答案。 (我还对原帖进行了回滚)。

我会以图形方式解释。

这一行:

(name= :nam, last_name1= :last_n1,family_id= :id_family, user_id= :id_user)

这不是使用PDO的INSERT的正确语法。

删除所有单词/等于

(:nam, :last_n1, :id_family, :id_user)

参考文献:

旁注:您有5列,但在您的值中使用4;一个缺失或者列太多了。

birth_date :d_b似乎缺少一个,因此需要在您的值中添加。

(:nam, :last_n1, :d_b, :id_family, :id_user)

另外,正如评论中所述;确保你使用PDO而不是mysqli_来连接。冒号占位符是PDO语法。

同时确保您没有面对变量范围。

看到你正在使用自定义功能。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。