GVKun编程网logo

创建动态插入语句-PHP-MySQL(动态创建数据库)

26

在这篇文章中,我们将带领您了解创建动态插入语句-PHP-MySQL的全貌,包括动态创建数据库的相关情况。同时,我们还将为您介绍有关0423-mysql插入语句大全、date-mysql插入语句怎么插入

在这篇文章中,我们将带领您了解创建动态插入语句-PHP-MySQL的全貌,包括动态创建数据库的相关情况。同时,我们还将为您介绍有关0423-mysql插入语句大全、date-mysql插入语句怎么插入日期用什么函数?、insert-php+mysql中插入语句,时间前面为什么要有空格、Java中MySQL插入语句的性能:批处理方式准备的语句与具有多个值的单个插入的知识,以帮助您更好地理解这个主题。

本文目录一览:

创建动态插入语句-PHP-MySQL(动态创建数据库)

创建动态插入语句-PHP-MySQL(动态创建数据库)

我有一个具有多个下拉菜单(16)speed []和其他一些字段的表单

下拉框中的数据必须插入到MysqL表中

我要做的是获取计数count($_ POST [“ speed”]);然后循环遍历直到速度数组结束.

问题是:

>如果未选择下拉菜单中的任何一个,则返回“ -1”,如果使用`($_POST [“ speed”] [$i]!=“-1”),则它不进行比较并进入IF环
>插入查询无效,不确定如何附加多余的逗号

打印时为$sql

INSERT INTO mytablename (w_name,wtype,speed1,speed2, speed3, speed4, speed5, speed6, speed7, speed8, speed9, speed10, speed11, speed12, speed13, speed14, speed15, speed16, coach_id) VALUES ('name', '', ''-1''800''-1''-1''200''-1''-1''-1''-1''-1''-1''-1''-1''-1''-1''200'', '208')

我的PHP代码

 $itemCount = count($_POST["speed"]);
        $itemValues=0;
        $query = "INSERT INTO mytablename (w_name,wtype,speed1,speed2, speed3, speed4, speed5, speed6, speed7, speed8, speed9, speed10, speed11, speed12, speed13, speed14, speed15, speed16, coach_id) VALUES ";
        $bldSpltString="";
        $queryValue = "";
        for($i=0;$i<$itemCount;$i++) {
            if(($_POST["speed"][$i]!="-1") || !empty($_POST["speed"][$i])) {

                $bldSpltString .= "'" .  $_POST["speed"][$i] ."'";
            }
        }
        $queryValue .= "('" . $wkout . "', '" . $wtype . "', '" . $bldSpltString . "', '" .$_SESSION['id']."')";

        $sql = $query.$queryValue;
        echo $sql;
        exit;

解决方法:

我会做这样的事情:

<?PHP
    function dynamicInsert($table_name, $assoc_array){
        $keys = array();
        $values = array();
        foreach($assoc_array as $key => $value){
            $keys[] = $key;
            $values[] = $value;
        }
        $query = "INSERT INTO `$table_name`(`".implode("`,`", $keys)."`) VALUES('".implode("','", $values)."')";
        echo $query;
    }
    dynamicInsert("users", array(
        "username" => "Test User",
        "password" => "Password123"
    ));
?>

警告:此代码不安全,我将对发送到MysqL的变量运行MysqL_real_escape_string和任何其他必要的卫生措施.我还要避免允许此脚本在任何公开场合运行,因为动态插入可能会带来巨大的安全风险!

0423-mysql插入语句大全

0423-mysql插入语句大全

 1 /*注意:
 2 1、字段和值要一一对应
 3 2、值的数据类型是字段的数据类型
 4 3、当输入的字段是表中全部字段时,字段可以省略不写:
 5 insert into login values (''zhangsan'',‘123’,‘张三’,1);
 6 4、不是全部字段时,字段必须写(主键如不是自增必须添加):
 7 insert into login(userid,password) values (''zhangsan'',‘123’);
 8 5、添加多条数据时,逗号分隔;
 9 insert into login(userid,password,username,sex) values (''zhangsan'',''123'',''张三'',1),(''lisi'',''456'',''李四'',1);
10 */
11 
12 #方法一:
13 insert into login(userid,password,username,sex) values (''xiaohong'',''123'',''小红'',1);
14 #方法二:
15 insert into zuoye1(id,f4) values (1001,''小红'');
16 insert into login(userid,password) select id,f4 from zuoye1;
17 #方法三:
18 insert into login set userid = ''000'', password = ''nihao'';

 

date-mysql插入语句怎么插入日期用什么函数?

date-mysql插入语句怎么插入日期用什么函数?

mysqldate

sql="insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)" +
" values(1000,?,?,?,date_format(?,''yyyy-mm-dd''),?,?,?)";
如上 在mysql中把string转换成日期 应该怎么写,用什么函数?

insert-php+mysql中插入语句,时间前面为什么要有空格

insert-php+mysql中插入语句,时间前面为什么要有空格

insertphpmysqli

数据表如下:

#
Name
Type
Collation
Attributes
Null
Default
Extra
Action

1
id
int(10)

UNSIGNED
No
None
AUTO_INCREMENT
Change
Drop
More

2
author
char(20)
utf8_general_ci

立即学习“PHP免费学习笔记(深入)”;

No
None

Change
Drop
More

3
addtime
datetime

No
None

Change
Drop
More

4
content
varchar(100)
utf8_general_ci

No
None

Change
Drop
More

5
reply
varchar(100)
utf8_general_ci

No
None

Change
Drop
More
Check AllWith selected: Browse Change Drop Primary Unique Index

Print view Relation view Propose table structure Move columns

Add column(s) At End of Table At Beginning of Table Afteridauthor addtimecontentreply

  • IndexesInformationSpace usageData16KiBIndex0BTotal16KiBRow statisticsFormatCompactCollationutf8_general_ciNext autoindex2CreationApr 18, 2015 at 10:51 AM

1.只写入时间。
$sql = "INSERT INTO message(addtime,) VALUES (''2015-04-22 08:33:46'')";
可以写入,结果如下:

id
主键,自动增长
author
作者
addtime
留言时间
content
留言内容
reply
回复

Edit
Copy
Delete
1

2015-04-22 08:33:46

2.按照表单填写留言。
$sql="INSERT INTO message(author, addtime, content) VALUES (''$name'',''$addtime'',''$content'')";
可以正常写入,让我困惑的是addtime中的addtime前面为什么必须要有空格?

Java中MySQL插入语句的性能:批处理方式准备的语句与具有多个值的单个插入

Java中MySQL插入语句的性能:批处理方式准备的语句与具有多个值的单个插入

我正在设计一个MySQL数据库,该数据库每秒需要处理各种InnoDB表大约600行的插入。我当前的实现使用非批处理的预处理语句。但是,MySQL随着时间的推移,写入数据库瓶颈和队列大小会增加。

该实现是用Java编写的,我不知道它的版本。它使用MySQL的Java连接器。我需要考虑改用JDBC明天。我假设这是两个不同的连接器包。

我已阅读有关该问题的以下主题:

  • 优化MySQL插入以处理数据流
  • MyISAM与InnoDB
  • 将二进制数据插入MySQL(不带PreparedStatement)

并从mysql网站:

  • http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

我的问题是:

  • 有没有人对以批处理方式使用带准备语句的INSERT与使用INSERT带多个VALUE 的单个语句的性能差异有任何建议或经验。

  • 什么是之间的性能差异MySQL的Java连接器对JDBC。我应该使用另一个吗?

  • 这些表用于存档目的,将看到〜90%的写入量到〜10%的读取量(甚至更少)。我正在使用InnoDB。这是MyISAM的正确选择吗?

预先感谢您的帮助。

答案1

小编典典

JDBC只是数据库访问的Java SE标准,提供了标准接口,因此您实际上并不局限于特定的JDBC实现。MySQL Java连接器(Connector /
J)仅是MySQL数据库的JDBC接口的实现。根据经验,我参与了一个使用MySQL使用大量数据的项目,对于可生成的数据,我们最喜欢使用MyISAM:它可以实现更高的性能损失交易,但总的来说,MyISAM更快,但是InnoDB更可靠。

我也想知道大约一年前INSERT语句的性能,并且在我的代码架中找到了以下旧测试代码(对不起,它有点复杂,而且超出了您的问题范围)。以下代码包含4种插入测试数据的方式的示例:

  • INSERT s;
  • 分批 INSERT
  • 手动散装 INSERT(切勿使用-危险);
  • 最后 准备好批量 INSERT)。

它使用TestNG作为运行程序,并使用一些自定义代码,例如:

  • runWithConnection()方法-确保在执行回调后连接被关闭或放回连接池(但低于用途声明关闭不可靠的战略的代码-即使没有try/ finally减少代码);
  • IUnsafeIn<T, E extends Throwable>-一个自定义的回调接口,用于接受单个参数但可能会引发E类型异常的方法,例如: void handle(T argument) throws E;

    package test;

    import test.IUnsafeIn;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    import static java.lang.String.format;
    import static java.lang.String.valueOf;
    import static java.lang.System.currentTimeMillis;

    import core.SqlBaseTest;
    import org.testng.annotations.AfterSuite;
    import org.testng.annotations.BeforeSuite;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;

    public final class InsertVsBatchInsertTest extends SqlBaseTest {

    private static final int ITERATION_COUNT = 3000;private static final String CREATE_TABLE_QUERY = "CREATE TABLE IF NOT EXISTS ttt1 (c1 INTEGER, c2 FLOAT, c3 VARCHAR(5)) ENGINE = InnoDB";private static final String DROP_TABLE_QUERY = "DROP TABLE ttt1";private static final String CLEAR_TABLE_QUERY = "DELETE FROM ttt1";private static void withinTimer(String name, Runnable runnable) {    final long start = currentTimeMillis();    runnable.run();    logStdOutF("%20s: %d ms", name, currentTimeMillis() - start);}@BeforeSuitepublic void createTable() {    runWithConnection(new IUnsafeIn<Connection, SQLException>() {        @Override        public void handle(Connection connection) throws SQLException {            final PreparedStatement statement = connection.prepareStatement(CREATE_TABLE_QUERY);            statement.execute();            statement.close();        }    });}@AfterSuitepublic void dropTable() {    runWithConnection(new IUnsafeIn<Connection, SQLException>() {        @Override        public void handle(Connection connection) throws SQLException {            final PreparedStatement statement = connection.prepareStatement(DROP_TABLE_QUERY);            statement.execute();            statement.close();        }    });}@BeforeTestpublic void clearTestTable() {    runWithConnection(new IUnsafeIn<Connection, SQLException>() {        @Override        public void handle(Connection connection) throws SQLException {            final PreparedStatement statement = connection.prepareStatement(CLEAR_TABLE_QUERY);            statement.execute();            statement.close();        }    });}@Testpublic void run1SingleInserts() {    withinTimer("Single inserts", new Runnable() {        @Override        public void run() {            runWithConnection(new IUnsafeIn<Connection, SQLException>() {                @Override                public void handle(Connection connection) throws SQLException {                    for ( int i = 0; i < ITERATION_COUNT; i++ ) {                        final PreparedStatement statement = connection.prepareStatement("INSERT INTO ttt1 (c1, c2, c3) VALUES (?, ?, ?)");                        statement.setInt(1, i);                        statement.setFloat(2, i);                        statement.setString(3, valueOf(i));                        statement.execute();                        statement.close();                    }                }            });        }    });}@Testpublic void run2BatchInsert() {    withinTimer("Batch insert", new Runnable() {        @Override        public void run() {            runWithConnection(new IUnsafeIn<Connection, SQLException>() {                @Override                public void handle(Connection connection) throws SQLException {                    final PreparedStatement statement = connection.prepareStatement("INSERT INTO ttt1 (c1, c2, c3) VALUES (?, ?, ?)");                    for ( int i = 0; i < ITERATION_COUNT; i++ ) {                        statement.setInt(1, i);                        statement.setFloat(2, i);                        statement.setString(3, valueOf(i));                        statement.addBatch();                    }                    statement.executeBatch();                    statement.close();                }            });        }    });}@Testpublic void run3DirtyBulkInsert() {    withinTimer("Dirty bulk insert", new Runnable() {        @Override        public void run() {            runWithConnection(new IUnsafeIn<Connection, SQLException>() {                @Override                public void handle(Connection connection) throws SQLException {                    final StringBuilder builder = new StringBuilder("INSERT INTO ttt1 (c1, c2, c3) VALUES ");                    for ( int i = 0; i < ITERATION_COUNT; i++ ) {                        if ( i != 0 ) {                            builder.append(",");                        }                        builder.append(format("(%s, %s, ''%s'')", i, i, i));                    }                    final String query = builder.toString();                    final PreparedStatement statement = connection.prepareStatement(query);                    statement.execute();                    statement.close();                }            });        }    });}@Testpublic void run4SafeBulkInsert() {    withinTimer("Safe bulk insert", new Runnable() {        @Override        public void run() {            runWithConnection(new IUnsafeIn<Connection, SQLException>() {                private String getInsertPlaceholders(int placeholderCount) {                    final StringBuilder builder = new StringBuilder("(");                    for ( int i = 0; i < placeholderCount; i++ ) {                        if ( i != 0 ) {                            builder.append(",");                        }                        builder.append("?");                    }                    return builder.append(")").toString();                }                @SuppressWarnings("AssignmentToForLoopParameter")                @Override                public void handle(Connection connection) throws SQLException {                    final int columnCount = 3;                    final StringBuilder builder = new StringBuilder("INSERT INTO ttt1 (c1, c2, c3) VALUES ");                    final String placeholders = getInsertPlaceholders(columnCount);                    for ( int i = 0; i < ITERATION_COUNT; i++ ) {                        if ( i != 0 ) {                            builder.append(",");                        }                        builder.append(placeholders);                    }                    final int maxParameterIndex = ITERATION_COUNT * columnCount;                    final String query = builder.toString();                    final PreparedStatement statement = connection.prepareStatement(query);                    int valueIndex = 0;                    for ( int parameterIndex = 1; parameterIndex <= maxParameterIndex; valueIndex++ ) {                        statement.setObject(parameterIndex++, valueIndex);                        statement.setObject(parameterIndex++, valueIndex);                        statement.setObject(parameterIndex++, valueIndex);                    }                    statement.execute();                    statement.close();                }            });        }    });}

    }

看一下用@Test注释注释的方法:它们实际上执行INSERT语句。还请看一看CREATE_TABLE_QUERY常量:在源代码中,它使用InnoDB在装有MySQL
5.5(MySQL Connector / J 5.1.12)的计算机上产生以下结果:

InnoDBSingle inserts: 74148 msBatch insert: 84370 msDirty bulk insert: 178 msSafe bulk insert: 118 ms

如果将CREATE_TABLE_QUERYInnoDB 更改为MyISAM,则会看到显着的性能提升:

MyISAMSingle inserts: 604 msBatch insert: 447 msDirty bulk insert: 63 msSafe bulk insert: 26 ms

希望这可以帮助。

UPD:

对于第四种方法,您必须适当地自定义max_allowed_packetin
mysql.ini(本[mysqld]节),使其足够大以支持真正的大数据包。

今天关于创建动态插入语句-PHP-MySQL动态创建数据库的分享就到这里,希望大家有所收获,若想了解更多关于0423-mysql插入语句大全、date-mysql插入语句怎么插入日期用什么函数?、insert-php+mysql中插入语句,时间前面为什么要有空格、Java中MySQL插入语句的性能:批处理方式准备的语句与具有多个值的单个插入等相关知识,可以在本站进行查询。

本文标签: