簡體   English   中英

未捕獲的異常“mysqli_sql_exception”帶有消息“未為准備好的語句中的參數提供數據”

[英]Uncaught exception 'mysqli_sql_exception' with message 'No data supplied for parameters in prepared statement'

我正在嘗試使用准備好的語句編寫查詢。

mysqli_report(MYSQLI_REPORT_ALL);

    $query = $conn->prepare("INSERT INTO notification(MessageId,TopicArn,Subject,Message,Timestamp,SignatureVersion,Signature,SigningCertURL,UnsubscribeURL,topicid) 
                VALUES (?, ?, ?, ?, ?,?, ?, ?, ?, ?)");

這將引發以下異常

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No data supplied for parameters in prepared statement'

以下查詢在哪里工作

$query = $conn->prepare("INSERT INTO notification(MessageId,TopicArn,Subject,Message,Timestamp,SignatureVersion,Signature,SigningCertURL,UnsubscribeURL,topicid) 
        VALUES (".$message['MessageId'].", '".$message['TopicArn']."', '".$message['Subject']."', '".$message['Message']."', '".$message['Timestamp']."',".$message['SignatureVersion'].", '".$message['Signature']."', '".$message['SigningCertURL']."', '".$message['UnsubscribeURL']."', ".$topic.")");

我想將准備好的語句與 bind_param() 函數一起使用。 第一個查詢有什么問題? 請幫忙。

正如我所建議的 - 您需要將參數綁定到值,然后才能執行 sql ~ 可能像這樣:

mysqli_report(MYSQLI_REPORT_ALL);
$sql='insert into notification
    (messageid,topicarn,subject,message,timestamp,signatureversion,signature,signingcerturl,unsubscribeurl,topicid) 
    values
    (?, ?, ?, ?, ?,?, ?, ?, ?, ?)';

$stmt = $conn->prepare( sql );
if( $stmt ){
    /* assumed mainly strings other than those with `id` in column name */
    $stmt->bind_param('issssssssi',
        $message['MessageId'],
        $message['TopicArn'],
        $message['Subject'],
        $message['Message'],
        $message['Timestamp'],
        $message['SignatureVersion'],
        $message['Signature'],
        $message['SigningCertURL'],
        $message['UnsubscribeURL'],
        $topic
    );
    $result=$stmt->execute();

    /* Other code */

} else {
    /* investigate why "prepare" method failed */
    echo "Error:";
}

您可以像下面這樣綁定數據。

$stmt = $conn->prepare( $sql );
if( $stmt ){ 
    $stmt->bind_param('issssssssi', $message['MessageId'], $message['TopicArn'],
        $message['Subject'], $message['Message'], $message['Timestamp'],
        $message['SignatureVersion'], $message['Signature'],   $message['SigningCertURL'],
        $message['UnsubscribeURL'] ,$message['UnsubscribeURL']  );
}

您只是忘記在sql前面添加$ ,請添加並重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM