我已经搜索并尝试了大约3个小时的不同解决方案,现在我正在崩溃并发布这个问题。
我有以下代码;
<?php
include 'db.php';
$trackcd = $_GET['trackCD'];
$trackTitle = $_GET['trackTITLE'];
$duration = $_GET['secDuration'];
$artIDD = mysqli_query($conn, "SELECT artID FROM cd WHERE cdID=$trackcd");
$results = mysqli_query($conn, "SELECT artID, artName FROM artist WHERE artID=$artIDD");
$row = mysqli_fetch_assoc($results);
$sql = "INSERT INTO tracks (trackID, artID, artistName, trackCD, trackTITLE, secDuration) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iisssi', $trackID, $artIDD, $row["artName"], $trackcd, $trackTitle, $duration);
$result = $stmt->execute();
if(!$result) echo "Failed";
//header('Location: tracks.php');
?>
但是在第10行;
$results = mysqli_query($conn, "SELECT artID, artName FROM artist WHERE artID=$artIDD");
我收到以下错误消息;
捕获致命错误:第10行的D:\ xampp \ htdocs \ dashboard \ inserttrack.php中无法将类mysqli_result的对象转换为字符串。
这些查询都使用主键,并且只返回一个结果,稍后我需要INSERT查询。我之前看到的大多数问题建议创建一个循环,但我不知道这将如何帮助我,因为我只得到一个我想稍后使用但不需要打印的结果。
使用mysqli_query和$ row = mysqli_fetch_assoc($ results);我从类似的问题中得到的东西,但他们没有解决我的问题。
请帮忙。
答案 0 :(得分:0)
您没有将第一个查询的结果传递给第二个查询:
$query = mysqli_query($conn, "SELECT artID FROM cd WHERE cdID=$trackcd");//vulnerable
$art_id_row = mysqli_fetch_assoc($query);
$art_id = $art_id_row['artID']
答案 1 :(得分:0)
您的第二次尝试表明我们做得很好。只需绑定您从 fetch_assoc()
获得的变量。
此代码应如下所示:
$stmt = $conn->prepare('SELECT artID FROM cd WHERE cdID=?');
$stmt->bind_param('s', $trackcd);
$stmt->execute();
$results = $stmt->get_result();
$row = $results->fetch_assoc();
$artIDD = $row['artID'] ?? null;
$stmt = $conn->prepare('SELECT artID, artName FROM artist WHERE artID=?');
$stmt->bind_param('s', $artIDD);
$stmt->execute();
$results = $stmt->get_result();
$row = $results->fetch_assoc();
$sql = "INSERT INTO tracks (trackID, artID, artistName, trackCD, trackTITLE, secDuration) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iisssi', $trackID, $artIDD, $row["artName"], $trackcd, $trackTitle, $duration);
$result = $stmt->execute();
当然,如果您使用连接或子查询在一个查询中完成所有这些操作会更好。