如何在插入查询中使用mysqli_results中的字符串?

时间:2017-05-02 15:30:47

标签: php mysql

我已经搜索并尝试了大约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);我从类似的问题中得到的东西,但他们没有解决我的问题。

请帮忙。

2 个答案:

答案 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();

当然,如果您使用连接或子查询在一个查询中完成所有这些操作会更好。