PHP PDO多重更新查询将垃圾插入表中
我从客户端接收到一个JSON对象,它以随机顺序包含一个位置的属性 几乎地址的每个组成部分都可以跟在后面,也可以跟在前面。 例如:国家可能在国家之前或之后,城市可能在两者之间的任何地方 所以我创建了一个函数,它动态地将每个参数绑定到它所属的位置。 但出于某种原因,我在数据库中得到的唯一东西是垃圾正整数和负整数 通过回显生成的查询和绑定值进行简单的调试并没有多大帮助 以下是输出示例(首先是查询,然后是以下形式的绑定参数): :param---value): 代码: Mysql不支持多个更新或多个查询(我的默认设置)。PHP PDO多重更新查询将垃圾插入表中,php,json,insert,pdo,Php,Json,Insert,Pdo,我从客户端接收到一个JSON对象,它以随机顺序包含一个位置的属性 几乎地址的每个组成部分都可以跟在后面,也可以跟在前面。 例如:国家可能在国家之前或之后,城市可能在两者之间的任何地方 所以我创建了一个函数,它动态地将每个参数绑定到它所属的位置。 但出于某种原因,我在数据库中得到的唯一东西是垃圾正整数和负整数 通过回显生成的查询和绑定值进行简单的调试并没有多大帮助 以下是输出示例(首先是查询,然后是以下形式的绑定参数): :param---value): 代码: Mysql不支持多个更新或多个查询
您需要单独运行这些更新
我知道现在你已经在分别运行它们了。你知道很难用你的大脑而不是电脑来运行代码 除了这段代码的问题之外,为什么不使用一些数据库包装器呢?使代码尽可能简单
function updateMultipile($table, $data = array())
{
$db = DBLink::getInstance();
foreach($data as $id => $update)
{
$sql = "UPDATE ?n SET ?u WHERE location_id = ?i";
$db->query($table,$update,$id);
}
}
无论如何,问题似乎是我多次尝试执行同一语句,或者bindParam在foreach循环中不起作用,如果提供了值($myValue),我会使用$value[$myKey],因为此函数接收引用而不是值 无论如何,我已经决定,在这种情况下,对于我的需要,bindValue就足够了 工作起来很有魅力 函数updateMultipile($table,$data=array()){
您好,我的函数处理一个二维数组,在这种情况下,用户选择一次更新多个位置。除此之外,它几乎是一样的。我明白了。它最终也是不可读的。并且比它应该的大10倍。
function updateMultipile($table, $data = array()){
$update_query = array();
$i = 0;
foreach($data as $key => $value){
$sql = "UPDATE $table SET ";
foreach($value as $column => $updatedValue){
$sql .= $column . " = :" . $column . ",";
}
$sql = rtrim($sql, ", ");
$sql .= " WHERE location_id = " . intval($key);
$update_query[$i] = $sql;
$i++;
}
try{
$conn = DBLink::getInstance();
$j = 0;
$success = 0;
foreach($data as $fieldset => $value){
echo('[1]');
$sth = $conn->prepare($update_query[$j]);
echo $update_query[$j] . "+++";
foreach($value as $key => $myValue){
$myKey = ':' . $key;
$sth->bindValue($myKey, $myValue); //PDO::PARAM_STR);
echo($myKey . " --- " . $myValue);
}
if($sth->execute()){
$success++;
}
else{
echo $sth->errorCode();
}
$j++;
}
}
catch(PDOException $err){
echo $err::getMessage;
}
return $success;
}
function updateMultipile($table, $data = array())
{
$db = DBLink::getInstance();
foreach($data as $id => $update)
{
$sql = "UPDATE ?n SET ?u WHERE location_id = ?i";
$db->query($table,$update,$id);
}
}
$update_query = array();
$i = 0;
foreach($data as $key => $value){
$sql = "UPDATE $table SET ";
foreach($value as $column => $updatedValue){
$sql .= $column . " = :" . $column . ",";
}
$sql = rtrim($sql, ", ");
$sql .= " WHERE location_id = " . intval($key);
$update_query[$i] = $sql;
$i++;
}
try{
$conn = DBLink::getInstance();
$j = 0;
$success = 0;
foreach($data as $fieldset => $value){
$sth[$j] = $conn->prepare($update_query[$j]);
foreach($value as $key => $myValue){
$myKey = ':' . $key;
$sth[$j]->bindValue($myKey, $myValue); //PDO::PARAM_STR);
}
if($sth[$j]->execute()){
$success++;
}
else{
echo $sth[$j]->errorCode();
}
$j++;
}
}
catch(PDOException $err){
echo $err::getMessage();
}
return $success;
}