我找不到有关此问题的任何信息来专门解决该问题,
而且我花了两个星期研究这个问题。我会尝试证明
支持该问题的代码。
下面是有效的代码。
目标是使用<td contenteditable="true"
内联编辑表数据
和onBlur元素属性。
我可以使用mysqli来完成这项工作,但不能使用PDO准备好的语句。
此代码运行完美。这个例子来自印度的Vincy, 如预期的那样,可以完美地使用我的所有数据库。但是我想要 在可能的情况下使用PDO,但是我在所有尝试中都失败了 将此过程一起转换为PDO和AJAX。我对此怀疑 指出使用PDO时,字符串必须经过json编码/解码为 工作,以便可以处理正确的PDO更新查询。我希望 这样也可以帮助别人。
index.php上的HTML表
<tr class="table-row">
<td><?php echo $k+1; ?></td>
<td contenteditable="true"onBlur="saveToDatabase(this,'question','<?php echo $faq[$k]["id"]; ?>')"onClick="showEdit(this);"><?php echo $faq[$k]["question"]; ?></td>
<td contenteditable="true" onBlur="saveToDatabase(this,'answer','<?php echo $faq[$k]["id"]; ?>')"onClick="showEdit(this);"><?php echo $faq[$k]["answer"]; ?></td>
</tr>
HTML表下面的AJAX jQuery函数。使用CDN版本3.3.1 jQuery
<script>
function showEdit(editableObj) {
$(editableObj).css("background","#FFF");
}
function saveToDatabase(editableObj,column,id) {
$(editableObj).css("background","#FFF url(loaderIcon.gif)no-repeat right");
$.ajax({
url: "saveedit.php",
type: "POST",
data:'column='+column+'&editval='+$(editableObj).text+'&id='+id,
success: function(data){
$(editableObj).css("background","#FDFDFD");
}
});
}
</script>
用于mysqli的数据库连接:完美运行
<?php
class DBController {
private $host = "localhost";
private $user = "root";
private $password = "";
private $database = "crosscon";
private $conn;
function __construct() {
$this->conn = $this->connectDB();
}
function connectDB() {
$conn = mysqli_connect($this->host,$this->user,$this->password,$this->database);
return $conn;
}
function runQuery($query) {
$result = mysqli_query($this->conn,$query);
while($row=mysqli_fetch_assoc($result)) {
$resultset[] = $row;
}
if(!empty($resultset))
return $resultset;
}
function numRows($query) {
$result = mysqli_query($this->conn,$query);
$rowcount = mysqli_num_rows($result);
return $rowcount;
}
function executeUpdate($query) {
$result = mysqli_query($this->conn,$query);
return $result;
}
}
?>
mysqli处理页面完美运行。 正在处理php页面。没有错误。 Mysqli工作并更新数据库。 AJAX正在将字符串传递给更新查询,而无需使用json编码或解码进行任何其他处理。它只是按应有的方式工作。
<?php
require_once("dbcontroller.php");
$db_handle = new DBController();
$result = $db_handle->executeUpdate("UPDATE blogs set " . POST["column"] . " = '".$_POST["editval"]."' WHERE id=".$_POST["id"]);
?>
page:process.php
<?php
require_once("dbPDO.php");
$column = $_POST['column'];
$editval = $_POST['editval'];
$id = $_POST['id'];
$sql = "UPDATE accounts SET column=?, editval=? WHERE id=?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$column, $editval, $id]);
var_dump($stmt);
?>
这会产生mysql错误:C:\ wamp64 \ www \ ajax5 \ editAccounts.php:10:null
因此,我没有将任何值传递给process.php。相同的代码在mysqli中可以完美地工作,并使用mysli连接对象对其进行处理。语言相同,因此这是合乎逻辑的。但是,即使考虑到数据库表已呈现,PDO中的类似代码也会失败,并且在两种情况下,网络都将'column
,editvalue
和id
作为字符串传递。在mysqli实例中,AJAX作为字符串发送并作为字符串处理。 PDO过程
在PDO实例中,我怀疑它现在必须作为json数组作为字符串发送,使用json解码功能(???)在处理页面上进行解码,以便可以通过以下方式设置和使用变量: PDO更新查询。我很可能可以解决此问题,但是,在两周后不久,我想知道是否有可能。我有模板,我已经完成了90%的工作,我刚刚在这个项目中碰壁。我非常想进行内联编辑,因为我认为用户非常喜欢它, 而且我喜欢PDO的安全性,但是如果无法使用jQuery和 具有准备好的语句的异步事件,我必须重新考虑我对应用程序的整个方法。 1.我的假设是否正确,即PDO必须使用发送页面上AJAX代码中编码的json数组? 2.是否有一个示例,说明如何在AJAX代码中执行此操作,然后在接收页面上对其进行解码,以便接收页面可以使用它,然后将成功字符串发送回接收页面? 谢谢