首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用PHP执行多个MYSQL查询

使用PHP执行多个MYSQL查询
EN

Stack Overflow用户
提问于 2018-05-05 07:09:52
回答 2查看 10.1K关注 0票数 4

我试图使用PHP运行连续的MYSQL语句,如下面的代码片段所示(它只是将一行复制到另一行,并通过tmp表重命名id )。

我得到了一条重复的语法错误消息。我尝试过多次迭代。代码看起来像我在PHP手册和其他myql问题中研究过的代码(不包括php维度)。

有人能解释一下为什么我的php语法不正确吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 include("databaseconnect.php");// This obviously works. Used a zillion time

$sql ="CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id 
 = 1;";
$sql.="UPDATE tmp SET id=100 WHERE id = 1;";
$sql.="INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100;";


if ($conn->query($sql) === TRUE) 
 {
  echo "Table row copied successfully. Do something with it";
 } 
 else 
 {
  echo "Error creating table: " . $conn->error;
  //close connection etc
 }

PHP消息返回:

创建表错误:您的SQL语法出现了错误;请检查与MariaDB服务器版本对应的手册,以便在第1行使用接近“UPDATE tmp SET id=100,其中id =1 1INSERT到event_categoriesBU SELECT * FROM”的正确语法

EN

回答 2

Stack Overflow用户

发布于 2018-05-05 07:20:40

不要一次运行一堆查询。通常情况下,一个手术的成功取决于所有其他操作的正确执行,所以你不能就像推土机一样在有问题的时候没有出什么问题。

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$queries = [
  "CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1",
  "UPDATE tmp SET id=100 WHERE id = 1",
  "INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100"
];

foreach ($query as $query) {
  $stmt = $conn->prepare($query);
  $stmt->execute();
}

不要忘记启用例外,这样任何查询失败都将停止您的进程,而不是失去控制的事情。

不使用multi_query的原因是该函数不支持占位符值。如果您需要在此查询中引入某种类型的用户数据,则需要使用bind_param才能安全执行。如果没有占位符值,您就会暴露在SQL注入错误中,其中一个错误就足以使整个应用程序容易受到攻击。

值得注意的是,与mysqli相比,PDO具有更大的灵活性和适应性,因此,如果您在mysqli上的投资不太大,就值得考虑切换。

票数 10
EN

Stack Overflow用户

发布于 2018-05-05 07:15:29

不能使用query($sql)执行多个SQL语句,必须使用multi_query($sql)。然后,您的脚本将变成如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ($conn->multi_query($sql) === TRUE) 
{
    echo "Table row copied successfully. Do something with it";
} 

有关完整的示例,请参阅文档

但是,请注意,正如其他用户在注释中解释的那样,使用此方法同时执行多个查询可能是潜在的危险,应尽可能避免,特别是在处理用户输入时。

如果一次执行一个查询并检查其结果,而不是将所有查询分组在一个调用中,则可以更好地控制执行流。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50190903

复制
相关文章
kubernetes 下实现socket.io 的集群模式
socket.io 单节点模式是很容易部署的,但是往往在生产环境一个节点不能满足业务需求,况且还要保证节点挂掉的情况仍能正常提供服务,所以多节点模式就成为了生成环境的一种必须的部署模式。
domain0
2019/05/15
2.5K0
kubernetes 下实现socket.io 的集群模式
清空Redis集群所有节点的数据工具
#!/bin/bash # Batch to clear all nodes using FLUSHALL command # 用来清空一个redis集群中的所有数据,要求 FLUSHALL 命令可用, # 如果在 redis.conf 中使用 rename 改名了 FLUSHALL,则不能执行本脚本。 # 可带两个参数: # 1)参数1 集群中的任一可用节点(必须) # 2)连接redis的密码(设置了密码才需要) REDIS_CLI=${REDIS_CLI:-redis-cli} REDIS_IP=${
一见
2020/09/07
2.1K0
查看Redis集群所有节点内存工具
指定集群中任意一个节点,查看集群中所有节点当前已用物理内存、配置的最大物理内存和系统物理内存。 源码(可从下载):
一见
2018/09/30
2.6K0
Kubernetes 集群部署 RabbitMQ + exporter (单节点)
RabbitMQ 是我们常用的消息的中间件,在项目开发、测试、部署到生成环境时,经常需要部署一套 RabbitMQ 来对数据进应用解耦、异步、流量削锋、数据分发、错峰流控、日志收集等等。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 RabbitMQ 消息中间件,当然,部署的是单节点模式,并非用于生产环境的集群模式。单节点的 RabbitMQ 部署简单,且配置存活探针,能保证快速检测 RabbitMQ 是否可用,当不可用时快速进行重启。
高楼Zee
2021/10/27
1.9K0
Kubernetes 1.8.6 集群部署–Master节点(五)
部署 master 节点 上面的那一堆都是准备工作,下面开始正式部署kubernetes了, 在master节点进行部署。 下载安装文件 # wget https://dl.k8s.io/v1.8.6/kubernetes-server-linux-amd64.tar.gz # tar -xzvf kubernetes-server-linux-amd64.tar.gz # cp -r kubernetes/server/bin/{kube-apiserver,kube-controller-manag
老七Linux
2018/05/31
8370
kubernetes集群搭建(3):master节点安装
1.  192.168.100.6:5000/rhel7/pod-infrastructure:1.0 为私库中的地址,默认配置文件中地址被和谐了,所以可以获取其他镜像源到本地私库
肖哥哥
2018/08/02
8750
使用kubeadm搭建多节点Kubernetes集群
安装kubernetes集群,有很多种方式,比如,minikube,kind,kubeadm,但是相较于kubeadm,前2种方式还是有各种不足之处,鉴于此,社区里就出现了一个专门用来在集群中安装 Kubernetes 的工具,名字就叫“kubeadm”,意思就是“Kubernetes 管理员”。
南非骆驼说大数据
2022/11/02
2.4K0
Kubernetes 1.8.6 集群部署–Node节点(六)
部署 Node 节点 其它两个node节点,需要在两个节点都执行安装操作 下载文件 # wget https://download.docker.com/linux/static/stable/x86_64/docker-17.12.0-ce.tgz # tar zxvf docker-17.12.0-ce.tar # cp docker/docker* /usr/local/bin 配置启动docker cat > docker.service << EOF [Unit] Description=Do
老七Linux
2018/05/31
9540
Kubernetes 1.8.6 集群部署–Master节点(五)
部署 master 节点 上面的那一堆都是准备工作,下面开始正式部署kubernetes了, 在master节点进行部署。 下载安装文件 # wget https://dl.k8s.io/v1.8.6/kubernetes-server-linux-amd64.tar.gz # tar -xzvf kubernetes-server-linux-amd64.tar.gz # cp -r kubernetes/server/bin/{kube-apiserver,kube-controller-manag
老七Linux
2018/05/15
1.5K7
Kubernetes 1.8.6 集群部署–Master节点(五)
kubernetes集群搭建(4):node节点安装
注意: /atomic.io/network 需与  master配置第7步中配置 etcdctl mk /atomic.io/network/config '{"Network":"172.16.0.0/16"}' 名称一致
肖哥哥
2018/08/02
5050
Kubernetes集群添加运行containerd runtime的 work节点
kuberadm搭建的1.15的初始集群,参见:2020-07-22-腾讯云-slb-kubeadm高可用集群搭建
对你无可奈何
2021/06/29
1.1K0
多个 Kubernetes 集群同GitLab Core功能的集成
本文将描述,在使用带有Core许可的GitLab中,它是如何将 Kubernetes 集群集成到GitLab CI/CD的进程里。在下面的例子中,我们会使用这个方法来集成Kubernetes。先来看看GitLab的官方支持文档以及我们自己的解决方案。
DevOps时代
2020/12/15
1.6K0
多个 Kubernetes 集群同GitLab Core功能的集成
Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
必须配置native.cgroupdriver,不配置这个步骤会导致kubelet启动失败
鱼找水需要时间
2023/08/03
3570
Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加
巧用 Prometheus 监控 Kubernetes 集群所有组件的证书
有部分读者可能听说过 ssl-exporter[2] 这个项目,它能提供多种针对 SSL 的检测手段,包括:HTTPS 证书、文件证书、Kubernetes Secret、Kubeconfig 文件。从功能上来看,它基本可以满足上述需求,但它的指标还不够丰富,本文将介绍一个更为强大的 Prometheus Exporter:x509-certificate-exporter[3]。
米开朗基杨
2021/07/15
1.6K0
Kubernetes 集群部署 MongoDB+exporter (单节点)
MongoDB 是我们常用的 NoSQL 数据库,在项目开发、测试、部署到生成环境时,经常需要部署一套 MongoDB 来对文档数据进行存储。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 MongoDB 数据库,当然,部署的是单节点模式,并非用于生产环境的主从或集群模式。单节点的 MongoDB 部署简单,且配置存活探针,能保证快速检测 MongoDB 是否可用,当不可用时快速进行重启。
高楼Zee
2021/10/27
1.9K0
(译)Zalando 是如何管理 140 多个 Kubernetes 集群的
最近我接到一个问题:“你是如何管理这么多 Kubernetes 的?”。本文试图揭示 Zalando 在 AWS 管理 140 多个 Kubernetes 集群的秘密。
崔秀龙
2019/11/05
1.1K0
(译)Zalando 是如何管理 140 多个 Kubernetes 集群的
kubeadm搭建kubernetes集群之三:加入node节点
该文介绍了如何使用kubeadm部署kubernetes集群,包括Master和Worker节点。首先介绍了kubeadm的作用,然后描述了如何利用kubeadm部署Master节点。接着介绍了如何配置kubectl以通过Master节点来管理集群。最后,介绍了如何添加Worker节点以扩展集群。
程序员欣宸
2018/01/04
3.2K1
kubeadm搭建kubernetes集群之三:加入node节点
零停机给Kubernetes集群节点打系统补丁
Salesforce 的 Einstein Vision 和语言服务部署在 AWS Elastic Kubernetes Service(EKS) 集群上。其中有一个最主要的安全和合规性需求,就是给集群节点的操作系统打补丁。部署服务的集群节点需要通过打补丁的方式进行系统的定期更新。这些补丁减少了可能让虚拟机暴露于攻击之下的漏洞。
深度学习与Python
2021/06/08
1.2K0
零停机给Kubernetes集群节点打系统补丁
kubeadm搭建kubernetes集群之二:创建master节点
程序员欣宸
2018/01/04
1.6K0
kubeadm搭建kubernetes集群之二:创建master节点
点击加载更多

相似问题

高图表列范围重叠列

17

高图-列范围为箭头

12

如何在高图表列范围图的不同列中显示重叠

17

高图表列图分组

10

高图表列图-呈现后手动转换列

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文