php insert语句有正确的参数但insert返回false

时间:2016-05-09 13:34:32

标签: php mysql sql-insert

好吧所以我的插入应该没问题,但是返回false,$ quote保持我检查过的值。我的数据库是here希望另一双眼睛可以发现这一点。我一直在使用相同的插入样式的其他PHP文件,工作正常。但这个很棘手......因为外键问题?

    <?php

$quote = $_POST["quote"];
require "init.php";

$query = "INSERT INTO `quote`(`quote_description`) VALUES('".$quote."');";
$result = mysqli_query($con,$query);


//"INSERT INTO `quote`(`quote_description`) VALUES ('".$quote."');";

if($result)
{
    $response = array();
    $code = "submit_true";
    $message = "Quote success, Click Ok to continue";
    array_push($response,array("code"=>$code,"message"=>$message));
    echo json_encode(array("server_response"=>$response));


}

else{
    $response = array();
    $code = "submit_false";
    $message = "Sorry, some server error occurred, please try again";
    array_push($response,array("code"=>$code,"message"=>$message));
    echo json_encode(array("server_response"=>$response));


}
mysqli_close($con);

?>

检查错误后,我收到以下错误:

  

无法添加或更新子行:外键约束失败(mydb.quote,CONSTRAINT fk_quote_user FOREIGN KEY(user_id)REFERENCES user(user_id)ON DELETE NO ACTION ON UPDATE NO ACTION)

1 个答案:

答案 0 :(得分:0)

在MySQL中使用INSERT时,必须包含要插入的所有列和值。试试这个;

$query = "INSERT INTO quote(quote_id, quote_description, quote_points, user_id, Quote_of_day_id) VALUES(NULL, '".$quote."', '".$points."', '".$user_id."', '".$qod_id."');";

如果您没有为此查询插入所有值,请将它们设置为空。要在以后添加值,请使用UPDATE:

$query = "UPDATE quote SET user_id = 8 WHERE quote_id = 6";

虽然这是一个插入解决方案,但它不安全且易受sql injection攻击。这是更好的面向对象的解决方案,更安全,我建议使用它比任何其他不安全的INSERTS:

$db = new mysqli($host, $user, $pass, $database);
$stmt = $db->prepare('INSERT INTO quote(quote_id, quote_description, quote_points, user_id, Quote_of_day_id) VALUES(?, ?, ?, ?, ?);');
$stmt->bind_param('isiii', $quote_id, $quote, $points, $user_id, $qod_id);

$stmt->execute();

此外,最好添加它来处理POST数据:

if(!isset($_POST["quote"])) {
    echo "Data not received correctly";
    exit();
}

希望这些例子对您有所帮助。祝你一切顺利。