Php PDO Mysql,想更新甚至插入数据吗
我这里有一个问题,我想更新CRUD中的数据,数据甚至添加新的(比如insert) 你有办法解决吗?谢谢 这是我的密码Php PDO Mysql,想更新甚至插入数据吗,php,mysql,pdo,crud,Php,Mysql,Pdo,Crud,我这里有一个问题,我想更新CRUD中的数据,数据甚至添加新的(比如insert) 你有办法解决吗?谢谢 这是我的密码 if ($valid) { $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE customers SET name = ?, email =
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE customers
SET name = ?, email = ?, address = ?
WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($name,$email,$address));
Database::disconnect();
header("Location: index.php");
}
}else {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM customers WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($id));
$data = $q->fetch(PDO::FETCH_ASSOC);
$name = $data['name'];
$email = $data['email'];
$address = $data['address'];
Database::disconnect();
}
在准备好的语句中也使用绑定id
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$values = array($name,$email,$address);
if($id) {
$sql = "UPDATE customers
SET name = ?, email = ?, address = ?
WHERE id = ?";
$values[] = $id;
} else {
$sql = "INSERT INTO customers (name, email, address)
VALUES (?,?,?)";
}
$q = $pdo->prepare($sql);
$q->execute($values);
Database::disconnect();
header("Location: index.php");
}
}else {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM customers WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($id));
$data = $q->fetch(PDO::FETCH_ASSOC);
$name = $data['name'];
$email = $data['email'];
$address = $data['address'];
Database::disconnect();
}
参见第8行(省略**)
编辑
为$id为空的情况添加了插入查询
基于对已准备语句中绑定id的注释的理解
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$values = array($name,$email,$address);
if($id) {
$sql = "UPDATE customers
SET name = ?, email = ?, address = ?
WHERE id = ?";
$values[] = $id;
} else {
$sql = "INSERT INTO customers (name, email, address)
VALUES (?,?,?)";
}
$q = $pdo->prepare($sql);
$q->execute($values);
Database::disconnect();
header("Location: index.php");
}
}else {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM customers WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($id));
$data = $q->fetch(PDO::FETCH_ASSOC);
$name = $data['name'];
$email = $data['email'];
$address = $data['address'];
Database::disconnect();
}
参见第8行(省略**)
编辑
为$id为空的情况添加了插入查询
根据对注释的理解绑定变量的数量与令牌的数量不匹配
$sql = "UPDATE customers
SET name = ?, email = ?, address = ?
WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($name,$email,$address));
你有四个代币吗?从开始,应该有四个参数:
$q->execute(array($name,$email,$address,$id));
注意不要放标题(“Location:index.php”)
与index.php位于同一个文件中,因为这样会循环,并且会出现如下错误:
您的Web主机重定向您的次数太多
绑定变量的数量与令牌的数量不匹配
$sql = "UPDATE customers
SET name = ?, email = ?, address = ?
WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($name,$email,$address));
你有四个代币吗?从开始,应该有四个参数:
$q->execute(array($name,$email,$address,$id));
注意不要放标题(“Location:index.php”)
与index.php位于同一个文件中,因为这样会循环,并且会出现如下错误:
您的Web主机重定向您的次数太多
第四个参数绑定在哪里?查询中有4个问号,执行时数组中只有3个元素完成了“new PDO”(“statement”还没有?或者您确定数据库::connect();因为我以前从未见过这种语法,它的“id”也应该在元素中?是的,我已经做过,但在不同的文件中,每个
?
都需要一个相应的绑定。这样是1:1。四个?
表示数组中的四个参数。第四个参数绑定在哪里?查询中有4个问号,我只绑定了3个元素n执行数组时执行“new PDO”(“语句”是否已执行?或者是否确定数据库::connect();因为我以前从未见过这种语法,它的“id”也应该在元素中?是的,我已经做过,但在不同的文件中,每个?
都需要一个相应的绑定。这样是1:1。四个?
表示数组中有四个参数。如果其他所有参数都不变,有时最好只包含有问题的行。有错误吗消息?执行了错误的查询?您应该提供比“不工作”更多的反馈,而不是必须解决的问题。这是工作,但我的意思是,“更新”不更新,甚至添加新数据(如插入CRUD)我很难理解这句话。你的意思是更新查询现在正在工作,但你还需要将数据作为新记录插入吗?我已经更改了数据并提交了它,但在index.php中,新数据并不能替换旧数据。如果其他所有内容都没有更改,最好只包含有问题的行。有错误消息吗?错误消息是否执行了?你应该给出比“不工作”更多的反馈,而不是必须解决的问题。这是工作,但我的意思是,“更新”不能更新,甚至不能添加新数据(如插入CRUD)我很难理解这句话。你的意思是更新查询现在正在工作,但是你还需要将数据作为新记录插入吗?我已经更改了数据并提交了它,但是在index.php中,新数据不能替换旧数据