【发布时间】:2020-07-08 18:38:18
【问题描述】:
我已经创建了 3 个表,我想要这 3 个表的数据
T1
- idt1 - 主键
- n1t1
- n2t1
T2
- idt2 - 主键
- n1t2
- n2t2
T3
- idt3
- idt1 - 外键
- idt2 - 外键
- n1t3
- n2t3
- n3t3
- n4t3
我搜索这些信息:n1t1,n2t1,n1t2,n1t3,n2t3
代码:
$stmt = $db->prepare("SELECT t1.n1t1 AS t1_n1t1, t1.n2t1 AS t1_n2t1, t2.n1t2 AS t2_n1t2, t3.n1t3 AS t3_n1t3, t3.n2t3 AS t3_n2t3
FROM t1
INNER JOIN t3 ON t1.idt1 = t3.idt1
INNER JOIN T2 ON T3.idt2 = T2.idt2
");
if ($result = $stmt->execute()) {
$arr = $result->fetchArray();
foreach ($arr as &$row) {
echo "1 : " . $row["t1_n1t1"] . "<br>";
echo "2 : " . $row["t1_n2t1"] . "<br>";
echo "3 : " . $row["t2_n1t2"] . "<br>";
echo "4 : " . $row["t3_n1t3"] . "<br>";
echo "5 : " . $row["t3_n2t3"] . "<br>";
}
}
错误:
我有显示的值(1:2)它会有所不同并且高于错误
Warning: Illegal string offset 一些名称为 n1T1 等。
我看到我在 t3 上的 idt1 和 idt2 (FOREIGN KEY) 有一个列名:0
屏幕:
我用一个 example.csv 插入:
n1t3;n2t3;n3t3;n4t3
123;n2a;n3a;n4a
456;n2b;n3b;n4b
789;n2c;n3c;n4c
456;n2d;n3d;n4d
代码: 我将我的 FOREINGN KEY 添加到
if (($file = fopen('exemple.csv', 'r')) === FALSE)
echo "SQLite 3 : error CSV";
$req = $db->exec("CREATE TABLE t3 (idt3 integer PRIMARY KEY AUTOINCREMENT, idt1 integer, idt2 integer, n1t3, n2t3, n3t3, n4t3 FOREIGN KEY(idT1) REFERENCES t1(idt1), FOREIGN KEY(idt2) REFERENCES t2(idt2))");
$req = $db->prepare("INSERT INTO t3 (idt1, idt2, n1t3, n2t3, n3t3, n4t3) VALUES (:idt1, :idt2, :n1t3, :n2t3, :n3t3, :n4t3)");
$idt1 = 0;
$idt2 = 0;
$req->bindValue(':idt1', $idt1++, SQLITE3_INTEGER);
$req->bindValue(':idt2', $idt2++, SQLITE3_INTEGER);
...
我已经退休了第一行,在 t1 和 t3 命名表进行测试
fgetcsv($file);
但总是相同的错误代码...
新的屏幕表格:
【问题讨论】:
-
我认为您简化了代码,并且您在查询中使用的列在表中不存在。编辑您的问题并发布正确的代码。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停整体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。 PS 很难遵循这个布局,它是杂乱无章的。也很难跟上你的写作。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。 PS 最好一次在一层内调试。显示每一层给予和得到的东西。 PS 你的第一个问题是什么?
-
请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com & 标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。