Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libmysql(c-api)比php-mysqli慢_Php_C_Performance_Mysqli_Libmysql - Fatal编程技术网

libmysql(c-api)比php-mysqli慢

libmysql(c-api)比php-mysqli慢,php,c,performance,mysqli,libmysql,Php,C,Performance,Mysqli,Libmysql,我正在调查为什么我的C-test程序(libmysql)的速度几乎是同一个php测试(cli)程序的两倍: 我正在创建一个准备好的语句并插入10条记录 php cli版本(mysqlnd)的速度几乎是使用libmysql的C版本的两倍。 我是这样测试的: time./dbctest&&timephp phptest.php C版本: gcc dbctest.c-o dbctest-lm-lmysqlclient-lz-std=c99*/ #包括 #包括 #包括 #包括 #包括 char my_s

我正在调查为什么我的C-test程序(libmysql)的速度几乎是同一个php测试(cli)程序的两倍:

我正在创建一个准备好的语句并插入10条记录

php cli版本(mysqlnd)的速度几乎是使用libmysql的C版本的两倍。 我是这样测试的: time./dbctest&&time
php phptest.php

C版本: gcc dbctest.c-o dbctest-lm-lmysqlclient-lz-std=c99*/ #包括 #包括 #包括 #包括 #包括 char my_str[16]; int my_str_length=0; 静态void insert_记录(MYSQL_STMT*STMT) { char*stmt_str=“插入漂白值(?); MYSQL_BIND参数[1]; //printf(“插入记录…\n”); 如果(mysql_stmt_prepare(stmt,stmt_str,strlen(stmt_str))!=0) { fprintf(标准,“\n准备…”); 返回; } memset((void*)param,0,sizeof(param));/*将结构归零*/ strcpy(my_str,“test”); my_str[5]='\0'; my_str_length=strlen(my_str); 参数[0]。缓冲区类型=MYSQL类型字符串; 参数[0]。缓冲区=(void*)my_str; 参数[0]。缓冲区长度=sizeof(my_str); 参数[0]。为_null=0; if(mysql\u stmt\u bind\u param(stmt,param)!=0) { fprintf(stderr,“\n cant bind…”); 返回; } 对于(int i=1;i<10;i++) { 如果(mysql\u stmt\u execute(stmt)!=0) { fprintf(stderr,“插入行时出错”); 返回; } } } int main(int argc,char*argv[]) { MYSQL*康涅狄格州; conn=mysql_init(NULL); 如果(conn==NULL) { printf(“错误%u:%s\n”,mysql\u errno(conn),mysql\u Error(conn)); 出口(1); } 如果(mysql\u real\u connect(conn,“127.0.0.1”,“root”,“password”,“test\u db”,0,NULL,0)=NULL) { printf(“错误%u:%s\n”,mysql\u errno(conn),mysql\u Error(conn)); 出口(1); } MYSQL_STMT*STMT; stmt=mysql\u stmt\u init(conn); 插入记录(stmt); 出口(0); } PHP版本:
我应该补充一点,我也使用-O2编译,没有差异
/*gcc dbctest.c  -o dbctest -lm -lmysqlclient -lz  -std=c99 */

#include <my_global.h>
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char my_str[16];
int my_str_length=0;
static void insert_records (MYSQL_STMT *stmt)
{
char            *stmt_str = "insert into bleach values (?)";
MYSQL_BIND      param[1];

//printf ("Inserting records...\n");
if (mysql_stmt_prepare (stmt, stmt_str, strlen (stmt_str)) != 0)
{
    fprintf(stderr,"\nCant prepare...");
    return;
}


memset ((void *) param, 0, sizeof (param)); /* zero the structures */

strcpy (my_str,"test");
my_str[5] = '\0';  
my_str_length = strlen (my_str);


param[0].buffer_type = MYSQL_TYPE_STRING;
param[0].buffer = (void *) my_str;
param[0].buffer_length = sizeof (my_str);
param[0].is_null = 0;


if (mysql_stmt_bind_param (stmt, param) != 0)
{
    fprintf(stderr,"\nCant bind..");
    return;
}



for (int i = 1; i < 10; i++)
{
    if (mysql_stmt_execute (stmt) != 0)
    {
        fprintf(stderr,"Error inserting row");
        return;
    }

}

}

int main (int argc, char *argv[])
{
MYSQL *conn;


conn = mysql_init(NULL);

if (conn == NULL) 
{
  printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
  exit(1);
}

if (mysql_real_connect(conn, "127.0.0.1", "root","password", "test_db", 0, NULL, 0) == NULL) 
{
    printf("Error %u: %s\n", mysql_errno(conn),     mysql_error(conn));
    exit(1);
}

MYSQL_STMT  *stmt;
stmt = mysql_stmt_init (conn); 
insert_records(stmt);
exit (0);
}
<?php
$mysqli = new mysqli("127.0.0.1", "root", "password",     "test_db");

$name = "TEST-PHP";
$stmt = $mysqli->prepare("insert into bleach values (?)");
$stmt->bind_param('s', $name);
for($i=0;$i< 10;$i++)
{
$stmt->execute();
}
$mysqli->close();
?>