我有一个SQL查询,我想在单个查询中插入多行.所以我使用了类似的东西:
$sql = "INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29)";
mysql_query( $sql, $conn );
Run Code Online (Sandbox Code Playgroud)
问题是当我执行这个查询时,我想检查是否应该检查一个UNIQUE
密钥(不是PRIMARY KEY
),例如'name'
上面的密钥,如果'name'
已经存在,则应该更新相应的整行,否则插入.
例如,在下面的示例中,如果'Katrina'
数据库中已存在,则应更新整个行,而不管字段的数量.如果'Samia'
不存在,则应插入该行.
我想过使用:
INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29) ON DUPLICATE KEY UPDATE
Run Code Online (Sandbox Code Playgroud)
这是陷阱.我陷入困境,对如何继续感到困惑.我有多行要一次插入/更新.请给我一个指示.谢谢.
使用 C++20,我们现在可以在 cppreference 中更频繁地阅读术语“niebloid”。
在 SO 上,我们今天可以找到 2020/07/16 2 篇提到它的文章:
谷歌也没有吐出那么多结果。最突出的也许是这里。
有人可以更多地了解 niebloids 吗?
Linux内核邮件列表中讨论了一个宏,该宏测试其参数是否为整数常量表达式,并且本身是一个整数常量表达式.
Martin Uecker提出的一种不使用内置函数的特别聪明的方法(从glibc的tgmath.h中获取灵感)是:
#define ICE_P(x) (sizeof(int) == sizeof(*(1 ? ((void*)((x) * 0l)) : (int*)1)))
Run Code Online (Sandbox Code Playgroud)
1
如果参数是整数常量表达式,0
则此宏扩展为值的整数常量表达式,否则.但是,它依赖于sizeof(void)
允许(和不同于sizeof(int)
),这是一个GNU C扩展.
是否可以在没有内置函数的情况下编写这样的宏而不依赖于语言扩展?如果是,它会评估其论点吗?
有关上面显示的宏的解释,请参阅:Linux Kernel的__is_constexpr宏
显然,consteval
它将成为C++ 20中的关键字.它的cppreference页面目前是空白的.它会是什么以及它与它有什么关系constexpr
?
constinit
是P1143中提出的C ++ 20中的新关键字和说明符。
标准中提供了以下示例:
const char * g() { return "dynamic initialization"; }
constexpr const char * f(bool p) { return p ? "constant initializer" : g(); }
constinit const char * c = f(true); // OK
constinit const char * d = f(false); // ill-formed
Run Code Online (Sandbox Code Playgroud)
我想到了几个问题:
什么constinit
意思 为什么要引入?在什么情况下我们应该使用它?
它使变量不可变吗?是暗示const
还是constexpr
?
变量可以是const
和constinit
吗?怎么样constexpr
和constinit
?
可以将说明符应用于哪些变量?为什么我们不能将其应用于static
非thread_local
变量?
有性能优势吗?
该问题旨在作为 …
我正在尝试理解fork()
和处理地址空间。我写了一个基本的概念证明程序,它派生出一个新进程并更改新进程中的一个变量。我的期望是,当我更改孩子中的变量时,这应该会导致该变量获得新地址。如果我理解正确,Linux 会使用 fork 进行写时复制。所以我希望父级和子级中的变量地址匹配,直到我在其中之一中更改它。那么我希望他们会有所不同。然而,这不是我所看到的。
这是因为写时复制从物理内存中分配了一个新页面,但进程地址空间没有改变 - 只是由 TLB 重新映射到新页面?还是我不理解这一点或在我的程序中犯了转储错误?
概念验证代码:
#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
void describe(const std::string &descr, const int &data) {
pid_t ppid = getppid();
pid_t pid = getpid();
std::cout << "In " << descr << ":\n"
<< "Parent Process ID: " << ppid
<< "\nMy Process ID: " << pid
<< "\nValue of data: " << data
<< "\nAddress of data: " << &data << "\n\n";
}
void change(int &data) …
Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
#include <string_view>
constexpr std::string_view f() { return "hello"; }
static constexpr std::string_view g() {
auto x = f();
return x.substr(1, 3);
}
int foo() { return g().length(); }
Run Code Online (Sandbox Code Playgroud)
如果我用 GCC 10.2 和 flags 编译它--std=c++17 -O1
,我会得到:
foo():
mov eax, 3
ret
Run Code Online (Sandbox Code Playgroud)
此外,据我所知,这段代码没有任何未定义的行为问题。
但是 - 如果我添加 flag -fsanitize=undefined
,编译结果是:
.LC0:
.string "hello"
foo():
sub rsp, 104
mov QWORD PTR [rsp+80], 5
mov QWORD PTR [rsp+16], 5
mov QWORD PTR [rsp+24], OFFSET FLAT:.LC0
mov QWORD PTR [rsp+8], 3
mov QWORD …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个谷歌Chrome 打包应用程序,当我把沙盒放入manifest.json
:
{
"manifest_version": 2,
"name": "WM32216",
"version": "2.1",
"minimum_chrome_version": "23",
"permissions":["webview", "https://ajax.googleapis.com/*"],
"sandbox":{
"pages":["index.html"]
},
"app": {
"background": {
"scripts": ["main.js"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
onclick
我的锚标签上的事件有效,应用程序的流程已完成,除此之外,CSS样式表中的图标无法加载.
我error
从控制台得到了一个
File not found
,
但那些只是字体所以对我来说很好,
最大的问题是,iframe中的视频无法播放,而且我在Font之前得到了额外的错误:
VIDEOJS:错误:(代码:4 MEDIA_ERR_SRC_NOT_SUPPORTED)无法加载媒体,因为服务器或网络出现故障或者格式不受支持.
不允许加载本地资源:blob:null/b818b32c-b762-4bd9 -...
当我删除manifest.json文件中的沙箱时,一切都很好,控制台中没有关于字体的错误,
但是,当我点击/单击我的锚点标记,其中有一个点击事件在js中加载一个新函数我得到以下控制台错误:
拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"default-src'self'blob:filesystem:chrome-extension-resource:".要么是'unsafe-inline'关键字,哈希('sha256 -...'),要么是nonce('nonce -...')来启用内联执行.另请注意,'script-src'未显式设置,因此'default-src'用作后备.
很抱歉很长的细节,
我只需要帮助,因为我已经在这里呆了3天了.
考虑以下标题并假设它在多个TU中使用:
static int x = 0;
struct A {
A() {
++x;
printf("%d\n", x);
}
};
Run Code Online (Sandbox Code Playgroud)
正如这个问题所解释的那样,这是ODR违规,因此也就是UB.
现在,如果我们的函数引用非对象并且我们不在该函数中使用它(加上其他条款),则不存在ODR违规,因此这在头文件中仍然可以正常工作:inline
volatile
const
constexpr int x = 1;
struct A {
A() {
printf("%d\n", x);
}
};
Run Code Online (Sandbox Code Playgroud)
但如果我们确实碰巧使用它,我们又回到UB的第一个方面:
constexpr int x = 1;
struct A {
A() {
printf("%p\n", &x);
}
};
Run Code Online (Sandbox Code Playgroud)
因此,鉴于我们现在有inline
变量,指南是否应该在标题中标记所有namespace
变量inline
以避免所有问题?
constexpr inline int x = 1;
struct A {
A() {
printf("%p\n", &x);
}
};
Run Code Online (Sandbox Code Playgroud)
这似乎也更容易教,因为我们可以简单地说" inline
标题中的所有内容"(即函数和变量定义),以及"从不static …
第9 行的?
操作符工作正常,但如果我在第 19 行的相同类型上使用相同的逻辑,它就会崩溃。
use std::error::Error;
use walkdir::WalkDir;
fn main() -> Result<(), Box<dyn Error>> {
let valid_entries = WalkDir::new("/tmp")
.into_iter()
.flat_map(|e| e)
.flat_map(|e| {
let name = e.file_name().to_str()?; // <-- this works
if name.contains(".txt") {
Some(e)
} else {
None
}
});
for entry in valid_entries {
println!("This file matches: {:?}", entry);
let name_to_str = entry.file_name().to_str()?; // <-- this blows up
// ...
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
这些错误对我来说有点神秘:
use std::error::Error;
use walkdir::WalkDir;
fn main() -> Result<(), Box<dyn Error>> …
Run Code Online (Sandbox Code Playgroud)