相关疑难解决方法(0)

与 XAMPP 相比,MariaDB Docker 容器中的 INSERT SQL 查询速度非常慢

我正在寻找 Web 应用程序的瓶颈,并发现 INSERT 查询的运行速度明显变慢,如下所示:

MariaDB [myforum]> insert into tag set tagtext='abc12345',dateline=unix_timestamp(),canonicaltagid=1234;
Query OK, 1 row affected (0.24 sec)
Run Code Online (Sandbox Code Playgroud)

这是通过将 安装mysql-client在应用程序容器中以进行测试来完成的。对于这样一个简单的查询,240 毫秒似乎很长。我假设了一些 dns/网络问题。但是在 MariaDB 容器中直接运行查询时,我看到了类似的结果,其中使用-h 127.0.0.1以下方法建立连接:

MariaDB [myforum]> insert into tag set tagtext='abc123',dateline=unix_timestamp(),canonicaltagid=1234;
Query OK, 1 row affected (0.251 sec)
Run Code Online (Sandbox Code Playgroud)

仅 INSERT 查询有效。SELECTs 和预期的一样快。奇怪的是,这似乎与 MariaDB Docker 安装有关:我在本地 XAMPP 安装上有相同的数据库,其中相同的查询速度很快:

MariaDB [myforum]> insert into tag set tagtext='abc123',dateline=unix_timestamp(),canonicaltagid=123;
Query OK, 1 row affected (0.00 sec) 
Run Code Online (Sandbox Code Playgroud)

我只能对表格本身进行有限的更改,因为它们来自 vBulletin(旧的专有论坛 CMS)。

我想知道为什么这些简单的查询如此之慢?

已经试过了

mysql ubuntu vbulletin mariadb docker

6
推荐指数
1
解决办法
1871
查看次数

bind_param错误

这是我的错误:

警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:变量数量与第19行/Applications/XAMPP/xamppfiles/htdocs/Jil/benutzer_eintragen.php中预准备语句中的参数数量不匹配

这是我的代码

$sql = "INSERT INTO benutzer SET vorname='?', nachname='?', username='?', email='?', passwort='?';";
$stmt = $db->prepare($sql);
$stmt->bind_param("sssss", $vorname, $nachname, $username, $email, $passwort);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

php mysql

3
推荐指数
1
解决办法
658
查看次数

如何使用 PDO bindParam 将点数据插入 mysql?

细节

我想利用mysql的空间扩展,所以我试图使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。不幸的是,我不断收到错误 SQLSTATE[23000]:完整性约束违规:1048 列“位置”不能为空。

我已经检查过经度和纬度有值。所以问题必须出在我的代码上,但我看不出我做错了什么。

这是我正在使用的代码。

$location=$latitude." ".$longitude;
$sql = "INSERT INTO my_geodata SET location = PointFromText('POINT(:location)')";
      //INSERT INTO my_geodata SET location = PointFromText('POINT(-41 12)');    

try 
{
    $stmt = $dbh->prepare($sql);            
    $stmt->bindParam(':location', $location, PDO::PARAM_STR);           
    $stmt->execute();   
    $dbh = null;
}

catch(PDOException $e)
{               
    echo $error=$e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何使用 PDO 和 bindParam 将经度和纬度插入到 mysql 表(使用 POINT 数据类型)中?

变化

基于 AgreeOrNot 的回答,实现这一点的一种稍微不同的方法是

$location = 'POINT(' . $latitude . " " . $longitude . ')';    
$sql = "INSERT INTO my_geodata (location) VALUES (PointFromText(:location))";
Run Code Online (Sandbox Code Playgroud)

php mysql gis pdo

3
推荐指数
1
解决办法
5716
查看次数

使用 insert SET 语法可以插入多行吗?

我在Using The INSERT INTO ... SET Syntax In MySQL博客中读到,您可以使用以下SET语法来插入记录。

例子:

INSERT INTO mytable SET col1= 'val1', col6= 'val6', col10='val10';
INSERT INTO mytable SET col3= 'val3', col5= 'val5', col10='val10';
INSERT INTO mytable SET col4= 'val4', col5= 'val5', col6='val6';
Run Code Online (Sandbox Code Playgroud)

是否可以仅用 1 条语句插入多行?

mysql sql insert

1
推荐指数
1
解决办法
3337
查看次数

标签 统计

mysql ×4

php ×2

docker ×1

gis ×1

insert ×1

mariadb ×1

pdo ×1

sql ×1

ubuntu ×1

vbulletin ×1