我正在通过android向mysql服务器发送一些数据,试图更新一些细节。目前php端看起来像 这样:
for($i=0; $i<(10); $i++){
for($k=0; $k<(10); $k++){
mysql_query("UPDATE sometable SET data_".$i."_".$k." = '10'
WHERE id = '".$_REQUEST['id']."'");
}
}
我必须使用循环,因为我将使用样式“data_x”构建许多通用类型的数据。不幸的是,这种布局没有 似乎更新了数据库中的任何字段。
此方法是否会创建某种类型的空间,或者只是在语句中读取时简单地破坏完整变量?
由于
答案 0 :(得分:1)
好的,关于当前迭代的一些事情。
$query = "UPDATE sometable SET";
for($i=0; $i<(10); $i++){
for($k=0; $k<(10); $k++){
$query .= ' data_'.$i.'_'.$k.' = \'10\''
if( !( $k == $i && $i == 10 ) ) $query .= ',';
}
}
//see side note below
$query .= 'WHERE id = ' . mysql_real_escape_string( $_REQUEST['id'] );
$res = mysql_query( $query );
if( !$res ) do_something_with_error( mysql_error() );
100次更新可能会使您的数据库/ PHP 生气并且您想要的最后一件事是愤怒的数据库。此外,这仅在REQUEST中进行一次数组查找,而上面的代码为100.(O(1)* 100仍为100)。
作为旁注:只是因为应该从Android发送某些内容,所以没有理由期望它不需要被正确转义。记住Bobby Tables的课程!
我也无法强烈建议您重新考虑您的架构。这似乎是现在处理事情的最简单方法,但后来的开发人员(包括你自己)会想知道那里应该存储什么。我曾经做过那样的项目而且他们并不好玩。 (另一方面,我不知道你的具体情况,所以我可能完全错了。)
这是解决初始复制粘贴错误:
至少,PHP无法解析这一行:
for(ik=0; $i<(10); $i++)
用美元符号重写它:
for($i=0; $i<(10); $i++)
答案 1 :(得分:0)
你根本没有调试代码吗?
查询实际上是否有效,并且表''sometable'中确实存在生成的字段'data_X_X'吗?
我的猜测是表格中不存在生成的字段名称。