PHP MYSQL将一个关联数组(记录)写入mysql

时间:2012-01-06 15:35:07

标签: php mysql

如果我有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函数可以完成我想要完成的任务吗?

2 个答案:

答案 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/之类的东西来将行抽象为一个可以处理提取和更新的对象。