如果我有mysql表foo,字段a,b,c,d有多个记录,而a是主键。记录1具有以下数据:a = 1,b =真,c = val1a,d = val2a。 如果我想使用php访问数据,我会这样做:
$result = mysql_query("SELECT * FROM foo WHERE a = '1'");
$rec = mysql_fetch_array($result);
要改变b和c,我会这样做:
mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'");
有没有办法在没有列出所有字段(a,b,c,d)的情况下编写整个记录?
我想做的是将整个$ rec写回表foo:
$rec['b'] = false;
$rec['c'] = 'newval';
mysql_query("INSERT INTO foo $rec");
我知道我可以做一个foreach并构建整个插入,但是已经有一个php函数可以完成我想要完成的任务吗?
答案 0 :(得分:3)
简单回答 - 没有。在插入值时,应该考虑很多事情,它们的类型是什么,它们是否被转义,它们是否需要引用它们等等。所以通常所有的值都不能被视为相同而且只是添加到字符串。最好使用类似MySQLi的扩展,而不是通过连接蜇来构建查询。一个简单的函数可以用你想要的循环做你想要的,但我不建议这样做。
另外 - 你错了什么:
mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'");
语法无效。您需要UPDATE
使用change b and c
。您也不需要ID周围的引号,即WHERE a = '1'
应该是WHERE a = 1
,它是一个整数值。
答案 1 :(得分:0)
我的MySQL有点生疏,但我不确定你能不能做那样的插入。您通常会为新值创建更新语句,这通常需要您尝试避免的foreach循环。
也许你想使用像doctrine,http://www.doctrine-project.org/之类的东西来将行抽象为一个可以处理提取和更新的对象。