解决了,查看我的最终答案帖子,了解对我有用的详细信息
*原始问题和编辑如下:
寻找一种通过发布数组设置多个sql项的方法。
我很确定我使用的是php5。
这里是我如何设置一个,但我不太了解PHP中的数组
mysql_query
("
UPDATE comics
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
WHERE id = $id
") or die(Err(mysql_error()));
我想从flash发布一个idArray和一个newPageNumberArray
其中id为idArray [0]的漫画会将其pageNumber设置为newPageNumberArray [0],依此类推。
阵列的长度彼此相等。但可以是任意长度,具体取决于管理工具中更改的页码数量。
现在我可以为每个项目单独生成一个php请求,但我认为在一个php请求中发送它们会更加清晰。
*的修改
感谢帕特里克,我感觉更接近......但我仍然没有做得很好。
flash发送这些数组
idArr:34,24
pageNumArr:1,2
php中的我有这个功能
function changePageNumbers($con, $idArr, $pageNumArr){
selectDataBase($con);
echo '&startForLoop=true';
for($i=0;$i<count($idArr);$i++)
{
$thisPageNum = mysql_real_escape_string($pageNumArr[$i]);
$thisId = mysql_real_escape_string($idArr[$i]);
echo '&thisPageNum='.$thisPageNum;
echo '&thisId='.$thisId;
mysql_query
("
UPDATE comics
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>')
WHERE `id` = ".$thisId."
LIMIT 1;
") or die(Err(mysql_error()));
echo '&querySent=true';
}
echo '&endForLoop=true';
}
它返回此
thisPageNum = 2及endForLoop =真安培; thisId = 2及startForLoop =真安培; querySent =真
似乎无序(也许这是正常的?)
更重要的是,当数组有2时,它只列出thisPageNum和thisId一次。
更重要的是它列出了thisId = 2.发送的id是34和24
*的 EDIT2 当我在html中运行它并在php中手动设置数组
时,它可以正常工作$idArr = array(34,24);
$pageNumArr = array(2, 1);
这意味着从闪存传递我的数组通过$ _POST,在某种程度上失败了。我确定它们是flash中构造良好的数组。也许在他们通过$ _POST的路上,他们变成了逗号分隔值。
运行更多测试。
答案 0 :(得分:2)
将数据设置为如下数组:
$uploaded_data = array(
0 => array(
'xml' => '..blah...blah',
'id' => 231
),
1 => array(
'xml' => 'bleh...bleh..',
'id' => 232
)
);
修改强> 从$ _POST更新的数组数据 这是数据从普通表格POST看起来的方式
$_POST = array(
'xml' => array(
'..blah...blah',
'bleh...bleh..'
),
'id' => array(
231,
232
),
'submit' => 'Submit'
);
并遍历数组并对每个内部数组执行插入
foreach($uploaded_data as $data)
{
$update_query = sprintf("UPDATE comics
SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
WHERE id = '%s'
LIMIT 1;",
mysql_real_escape_string($data['xml']),
mysql_real_escape_string($data['id'])
);
$update_result = mysql_query($update_query);
}
编辑2 通过$ _POST数据更新循环
for($i=0;$i<count($_POST['xml']);$i++)
{
if(!array_key_exists($i, $_POST['id']))
{
// if there is not a value for the id's at this count, break
$i = count($_POST['xml']);
continue;
}
$update_query = sprintf("UPDATE comics
SET xml = UpdateXML('%s','comic/pageNumber', '<pageNumber>'.$pageNumber.'</pageNumber>')
WHERE id = '%s'
LIMIT 1;",
mysql_real_escape_string($_POST['xml'][$i]),
mysql_real_escape_string($_POST['id'][$i])
);
$update_result = mysql_query($update_query);
}
重要强>:
始终对UPDATE
个查询设置限制。可能会发生错误并意外更新整个数据库而不是单行。
重要2
确保始终清理数据库输入(mysql_real_escape_string()
)
答案 1 :(得分:1)
您可以在一个请求中发送它们,并在PHP中创建一个循环来逐个更新它们。据我所知,在一个声明中无法做到这一点,或者你将不得不创建复杂的案例结构。这可能会带来一些更好的数据库性能,但对于那些SQL经验不足的人来说,这是一项很多工作,所以我应该用PHP来做。
不要忘记开始交易。 :)
循环:
foreach($_POST['variableofyourchoice'] as $id)
{
// Execute the query using $id
}
答案 2 :(得分:0)
最终答案
我能正确使用Post的唯一方法是使用CSV和PHP explode();正如 GolezTrol 建议
和 Patrick 演示了在PHP中逐步执行数组的过程。
所以这是所提供的帮助的组合:
经过一些测试后我的最终代码。
运行无闪光的测试
$_POST["idArr"] = "34,24";
$_POST["pageNumArr"] = "2,1";
将CSV(逗号分隔值)转换为数组
$idArr = explode(",", $_POST["idArr"]);
$pageNumArr = explode(",", $_POST["pageNumArr"]);
单步执行数组并发送sql查询
for($i=0;$i<count($idArr);$i++)
{
$thisPageNum = mysql_real_escape_string($pageNumArr[$i]);
$thisId = mysql_real_escape_string($idArr[$i]);
mysql_query
("
UPDATE comics
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>".$thisPageNum."</pageNumber>')
WHERE `id` = ".$thisId."
LIMIT 1;
") or die(Err(mysql_error()));
}
“正确答案”......转到GolezTrol
因为只有一个,我认为GolezTrol回答了标题中所述的问题,而帕特里克帮助解决了我之后会立即遇到的根本问题。
感谢您的帮助和耐心。