我有这个代码在我的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);
我尝试手动插入值并且它有效,我不知道它为什么不采用这些值。
答案 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
旁注:错误报告应仅在暂存时完成,而不是生产。