Hallo,
$sql = "insert into $tbl4(idlab,idurl,tme)values(select id from $tbl3 where lab='$q',select id from $tbl1 where b64url='$b','$d');";
wenn Du ein SQL-Problem hast, dann ist SQL-Code von Interesse, nicht PHP-Code, der SQL-Code generiert.
Sprich: Wie lautet das generierte SQL-Statement?
Vom Prinzip her sieht es ja wie folgt aus:
INSERT INTO
{tabelle} (
idlab, -- optimierbare Spaltennamen
idurl,
tme
)
VALUES (
SELECT id FROM {tabelle2} WHERE lab = '{wert}',
SELECT id FROM {tabelle3} WHERE b64url = '{anderer wert}',
'{dritter Wert}'
);
Wenn eine der beiden SELECT-Anweisungen in der VALUES-Klausel (oder auch beide) mehr als einen Wert zurückliefert, dann muss das einen Syntaxfehler hervorrufen. Ob SQLite die von Dir verwendete Syntax überhaupt unterstützt, kann ich Dir nicht sagen. MS SQL Server ließe solche Unterabfragen an dieser Stelle nicht zu. Dafür gibt es INSERT INTO ... SELECT:
INSERT INTO
{tabelle}
({spaltenliste})
SELECT
{spalten}
FROM
{tabellen}
WHERE
{einschränkung}
Bei dieser Form sollten Unterabfragen möglich sein.
Freundliche Grüße
Vinzenz