更新数据库时,可以用以下方式(我常用的,还有其他的方式):
一、用recordset记录集的方式。
rsopen "select from tablename where id="&request("id"),conn,1,3
rs("a")=request("a")
rs("b")=request("b")
rsupdate
rsclose
用这种方式进行数据更新,有个好处就是当要更新的数据量非常大时,也可以很顺利的更新成功(比如备注型字段的数据,中间还包含了换行等等的)
二、用sql的update语句:
connexecute("update tablename set a='"&request("a")&"',b='"&request("b")&"',c="&request("c")&" where id="&request("id"))
用上面的方法更新数据时,如果是SQL数据库,而你要更新的数据内容里含有比如单引号['],双横线[--]之类的特殊字符,就会更新不成功的,因为这时候SQL会认为是非法字符,而把你的单引号给去掉的。而且当如果更新的是备注型字段,里面包含了换行等字符,也会显得很乱。但用这种方法更新,速度比用recordset的速度要快很多,因为毕竟这是直接更新数据库,而recordset是对update的封装形式。
其实更新数据库,非常简单,如果你对字符串连接的单引号,双引号,&号的使用觉得很混乱,那就用recordset的方式进行,这样会很清晰,一点都不会有混乱的感觉的。而如果你能熟练的使用单引号,双引号,&号,那么你用update语句更新数据库,就大在的提交了速度(当然如果数据量小,我建议用recordset记录集的方式,因为这种方式一个字段对应一个值,一行一个,这样下来,很清晰,还可以对每行做个备注,以后改起来也方便。而用update的方式,所有的值和记录全部连在一块,老长的一串,看得人头都发麻,而且update还不能添加特殊字符,比如上面说的单引号等。。。)
<php
$info=$_POST['info'] ;
$values = "";
for($i = 0; $i < count($info['title']); $i++){
$values = "('{$info['title'][$i]}', '{$info['price'][$i]}', '{$info['amout'][$i]}'),";
}
$values = rtrim($values, ',');
mysql_query("insert into tablename values "$values);
//这种情况适用于比较少的行插入
如果数据量比较大
将数据按行存入文本中
for($i = 0; $i < count($info['title']); $i++){$values = "{$info['title'][$i]}\t{$info['price'][$i]}\t{$info['amout'][$i]}\r\n";
}
file_put_content('datatxt', $values);
mysql_query("load data local infile 'datatxt' into table tablename");
因为楼主没有说数据库的名字,还有表名所有,我写成了方法的入口参数了。我觉得楼主应该会取数组的值的哦。
环境: NET FRAMEWORK 20
需要引入的命名空间 SystemDataSqlClient
/// <summary>
/// 插入数据。
/// </summary>
/// <param name="database">数据库名</param>
/// <param name="userId">登录数据库的用户名</param>
/// <param name="password">登录密码</param>
/// <param name="srcTable">数据表名</param>
/// <param name="name">表字段 name</param>
/// <param name="sex">表字段 sex</param>
/// <returns></returns>
public int InsertData
( string database, string userId, string password, string srcTable, string name, string sex )
{
int affected = -1; // 用于记录受影响的行数。
// 构造连接字符串
string conStr = StringFormat( @"server=localhost;database={0};uid={1};password={2};", database, userId, password );
// 构造 T-SQL 语句
string sql = StringFormat( @"Insert INTO [{0}]( [name], [sex] ) VALUES( @name, @sex )", srcTable );
using( SqlConnection con = new SqlConnection( conStr ) )
{
SqlCommand cmd = new SqlCommand( sql );
// 设置参数的值
cmdParametersAddWithValue( "@name", name );
cmdParametersAddWithValue( "@sex", sex );
try
{
// 执行 *** 作,并记录受影响的行数。
affected = cmdExecuteNonQuery();
}
catch( SqlException sqlEx )
{
throw new Exception( "数据库异常", sqlEx );
}
catch
{
throw new Exception( "未知错误" );
}
finally
{
cmdCancel();
cmdDispose();
}
}
return affected;
}
命名列,如果需要,可以设置一个主键,然后把对应的值写入
比如:
create table abc(
mun int identity(1,1),
col1 varchar(10) null,
col2 varchar(10) null,
col3 varchar(10) null,
col4 varchar(10) null,
col5 varchar(10) null,
,
合计 varchar(10) null
)
然后你把数据写入这个表,最后一行的合计在报表中做
有两个方法可供选择,一种是把数据存入csv文件,然后执行load data infile
还有一种就是类似于sql server里面的bulk insert,使用insert语句插入批量数据,结合PHP的implode函数,
可以很简单的实现大批量数组数据的一次性插入。
[php] view plaincopy
$statement = "INSERT INTO table (title, type, customer) VALUES ";
foreach( $data as $row) {
$statement = ' ("' implode($row, '","') '")';
}
不过大批量数据的插入,需要注意mysql在内存上有限制:
>
利用PHP对数组赋值时下标变量会自动递增的特点,可以很方便用循环将数据存入一个数组。例如:$arr[] = 'a'; 这条语句会将字符a存入数组变量$arr中,如果$arr不存在则会新建一个;若已存在,则将$arr数组的下标变量递增1后存入字符。也就是说,如果已有$arr[0]='a', 那么执行 $arr[] = 'b'; 后,数组其实是进行了$arr[1] = 'b' 的 *** 作。
简单点的办法,数据库用一个字段表示数组,字段类型为文本类型。
程序存入数组到数据库的时候,利用join方法把数组转换为分隔符分隔的字符串,比如你的例子数组a[1]="第一步";a[2]="第二步";合并后为"第一步|第二步",把这个合并后的字符串存入数据库你是会的。
从数据库里面取出合并后的字符串"第一步|第二步"以后,利用split方法可以转换为数组。
这个方法的最大的优点是可以保存个数不确定的数组,程序编写相当简单。
以上就是关于update可以直接写数组么,更新进数据库么全部的内容,包括:update可以直接写数组么,更新进数据库么、PHP数组,如何写入mysql数据库、如何把数组的值插入到数据库 c#等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)