我有这个数据库:
我有这个ajax请求:
$("#noviDatum").click(function() {
var nd = $('#nD').val();
$.ajax({
url: "addDate.php",
type: "POST",
async: true,
data: {ajdi:ajdi,nd:nd}, //your form data to post goes here as a json object
dataType: "html",
success: function(data) {
console.log(data);
},
});
});
所以 ajdi = id_akt
现在我想在运行 addDate.php
时复制所有行 where id_akt = ajdi and where prvi = 1
但随后我需要更改 datum
复制具有 nd
值(也是日期)的行,并将 vrednost 复制到 0
。
是否可以做到这一点以及如何做到?还有这个方法如何保存?你有什么建议?
更新: 我用 php pdo 尝试这个,但是出了问题:
try {
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$rez = $conn->prepare("SELECT * FROM track_aktivnosti WHERE id_akt = :id_akt AND prvi=1");
$rez->execute(array(':id_akt' => $_POST['id_akt']));
$kol = $rez->fetchAll();
foreach ($kol as $r) {
$STH = $conn->prepare("INSERT INTO track_aktivnosti (datum, prvi, id_akt, tabela, id_tabele, naziv, vrednost) VALUES ($r['datum'], 0, :id_akt, $r['tabela'], $r['naziv'], 0)");
$STH->execute(array(':id_akt' => $_POST['id_akt']));
$STH->execute();
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
最佳答案
首先,我假设您的 addDate.php 已经实现了与 mysql 数据库通信的基本逻辑,并且您是一名优秀的编码员,并检查 ajax post 传递的所有值是否有任何邪恶的输入.
然后,您基本上首先需要检索要复制和修改的行:
...
$ajdi = $_POST['ajdi'];
$nd = $_POST['nd'];
...
$select_rows = query("SELECT * FROM your_table WHERE `id_akt`= $ajdi AND `id_akt`= 1") or die(mysql_error());
while($data = fetch_assoc($select_rows))
{
//we'll handle this in the next section
}
...
检索行后,您需要相应地更改每行数据,然后将其插入回表中。
...
while($data = fetch_assoc($select_rows))
{
$insert_row = query("INSERT INTO your_table (datum, prvi, other cols..) VALUES ($nd, $data['prvi'], other values...)");
if ($insert_row) {
/// Delete old row if needed by using $data['id']
}
}
...
如果您需要任何其他信息,请告诉我。
更新: 我对您更新的代码进行了一些更改,并添加了一些错误回显,以查看是否出现问题,但为了进一步澄清错误所在,您肯定需要调试代码:
try {
// Check if value is set
$id_akt = $_POST['id_akt'];
echo "Passed id: " . $id_akt . "\r\n";
$conn = new PDO("mysql:host=localhost;dbname=" . $dbname, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$rez = $conn->prepare("SELECT * FROM track_aktivnosti WHERE id_akt = :id AND prvi=1");
$rez->bindValue(':id', $id_akt, PDO::PARAM_INT);
$rez->execute();
//$data = $rez->fetchAll(PDO::FETCH_ASSOC);
while($r = $rez->fetch(PDO::FETCH_ASSOC)) {
// Check if we are in loop
echo "Processing row data:";
print_r($r);
echo "\r\n";
$STH = $conn->prepare("INSERT INTO track_aktivnosti (datum, prvi, id_akt, tabela, id_tabele, naziv, vrednost) VALUES (:r_datum, 0, :id_akt, :r_tabela, 0, :r_naziv, 0)");
$STH->execute(array(':r_datum' => $r['datum'],':id_akt' => $id_akt, ':r_tabela' => $r['tabela'], ':r_naziv' => $r['naziv'] ));
$affected_rows = $STH->rowCount();
echo "Affected rows: " . $affected_rows;
echo "\r\n";
echo "\r\n";
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
显然您的版本存在一些问题:
- 据我所知,Select 调用已准备就绪,但从未执行。
- 在插入命令中,如果您准备查询,则应在执行时传递所有变量(或在之前绑定(bind)它们)
- 您的第二个查询缺少 *id_table* 的值
- 您正在重复执行插入命令。
大多数问题通常可以通过花时间思考刚刚编写的内容并仔细检查逻辑错误来解决。
希望这有帮助。
关于php - Ajax请求并使用php pdo复制一些行但更改一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848980/