我正在通过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"样式构建许多通用类型的数据。遗憾的是,此布局没有似乎更新了数据库中的任何字段。
这个方法是创建某种类型的空间,还是只是在语句中读取时破坏一个完整的变量?
感谢
好的,关于当前迭代的几件事。
- 记录/输出您的错误
`$res=mysql_query($query);if(!$res)日志(myslq_error());/*或者死亡或其他什么*/` - 进行一次更新,而不是100次。
$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)。
顺便说一句:仅仅因为某个东西应该是从安卓系统发送的,就没有理由期望它不需要正确地转义。记住Bobby Tables的教训!
我也不能强烈建议你重新考虑你的模式。这似乎是目前处理事情最简单的方法,但后来的开发人员(包括你自己)会想知道应该在那里存储什么。我做过这样的项目,但它们并不有趣。(另一方面,我不知道你的具体情况,所以我可能完全错了)。
这是在解决最初的复制粘贴错误:
PHP至少不能解析这一行:
for(ik=0; $i<(10); $i++)
用美元符号改写:
for($i=0; $i<(10); $i++)
您调试代码了吗?
查询实际上有效吗?生成的字段"data_X_X"是否确实存在于表"sometable"中?
我的猜测是生成的字段名在您的表中不存在。