给定特定参数时,如何修复未运行的 SQL 查询? [复制]

Posted

技术标签:

【中文标题】给定特定参数时,如何修复未运行的 SQL 查询? [复制]【英文标题】:How to fix an SQL query not running when specific parameters are given? [duplicate] 【发布时间】:2019-12-05 05:28:50 【问题描述】:

我正在创建一个论坛,允许用户通过 html 表单上传图像,然后使用 php 将其保存到特定文件夹。然后我打算使用 SQL 查询向表中添加一行并包含所选图像的文件路径,以便我可以将其显示在另一个页面上。

我对 PHP 和 mysql 还很陌生,因此我一直在使用 Google 来获得很多答案。但是,我无法找到遇到此问题的其他人,并且在我的论坛中没有找到遇到类似问题的任何其他 SQL 查询。另外,我的代码没有收到任何错误。

<?php
include("../../../dbconn.php");
$cid = 1;
$scid = 1;
$topic_title = $_POST['topic-title'];
$content = $_POST['topic-content'];

$target_dir = "Saved Images/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) 
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
     else 
        echo "File is not an image.";
        $uploadOk = 0;
    

// Check if file already exists
if (file_exists($target_file)) 
    echo "Sorry, file already exists.";
    $uploadOk = 0;

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) 
    echo "Sorry, your file is too large.";
    $uploadOk = 0;

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) 
    echo "Sorry, your file was not uploaded.</br>";
// if everything is ok, try to upload file
 else 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    mysqli_query($con, "INSERT INTO Artists_Looking_For_Writers (`category_id`, `subcategory_id`, `title`, `content`, `date_posted`, `imgName1`) VALUES ('".$cid."', '".$scid."', '".$topic_title."', '".$content."', NOW(), '".$_FILES['fileToUpload']['name']."');");
     else 
        echo "Sorry, there was an error uploading your file.";
    

?>

这应该在我的表中创建一行,其中包含 category idsubcategory idtitlecontent发布日期我的图片名称。相反,不会向表中添加任何内容。仅当我在 SQL 查询中包含 imgName1 列时才会发生这种情况。如果我删除它和获取上传文件名称的命令,那么它会完美运行。

【问题讨论】:

另外,你真的应该考虑使用准备好的语句,这段代码很容易受到 SQL 注入攻击。 使用准备好的语句也意味着您不必担心引用此类问题。 真正对您有帮助的一件事是进行设置,以便您可以看到 MySQL 错误。 ***.com/questions/22662488/… @Jonnix 我没有看到我的反引号、双引号和单引号在哪里搞砸了。你能指出哪里吗? @Don'tPanic 我在其中添加了该行,它给了我这个错误:未捕获的 mysqli_sql_exception:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在 /Applications/XAMPP/xamppfiles/htdocs/dev/cc-Forum/topics/1/2/ 中的第 1 行的 ''my Image'')' 附近使用正确的语法submit_topic.php:47 堆栈跟踪:#0 /Applications/XAMPP/xamppfiles/htdocs/dev/cc-Forum/topics/1/2/submit_topic.php(47): mysqli_query(Object(mysqli), 'INSERT INTO Art. ..') #1 main 在第 47 行的 /Applications/XAMPP/xamppfiles/htdocs/dev/cc-Forum/topics/1/2/submit_topic.php 中抛出 【参考方案1】:

我解决了这个问题。问题在于我使用了单引号和双引号,然后我将查询移到单独的 if 语句中,从而解决了问题。

【讨论】:

以上是关于给定特定参数时,如何修复未运行的 SQL 查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复这个特定的“未声明的标识符”错误?

如果 where 子句已经修复,如何加快 spark sql 过滤器查询?

如何在 BigQuery UI 中安排查询时修复“请求包含无效参数”错误

如何修复 PHPUnit 中的“PHP 致命错误:未捕获的 TypeError:getTest() 参数”错误

sql查询确定状态?

Web常见漏洞及修复建议