MySQL查询语法和修剪

时间:2014-12-26 12:20:49

标签: php mysql mysqli

我在MYSQLI查询中收到错误,说第2行的语法有错误。我已经添加/修剪了所有变量,所以逗号/点不应该是打破命令。但是,有一个问题是我的文件名确实包含空格,所以我不确定Trim是否是一个不错的选择,因为它删除了空格,这是第二个问题。

我有以下php / mysql代码:

它给了我错误:

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' INSERT INTO文件附近使用正确的语法(f_name,f_type,f_size)VALUES(' ISYF.doc',' application / mswo'第2行

您在顶部看到的名称是文件名/文件类型

我已经尝试将mysql命令直接输入到数据库中,即使文件名中包含空格也可以。但是在浏览器上,它告诉我我有语法错误...

好的我做了更多测试,在我看来是START TRANSACTION; / COMMIT;引起这个问题的是什么,我非常怀疑他们带来的分号,谁都有同样的想法?

<?php  
session_start();
 require 'config.php';
 //I'm using mysqli_ as an example, it should be PDO

$ds = DIRECTORY_SEPARATOR;
$foldername = "updatefiles/";
if (isset($_POST['update']) && isset($_POST['description']) && isset($_POST['expire']) && isset($_POST['groupid'])){
    $title=addslashes(trim($_POST['update']));
    $description=addslashes(trim($_POST['description']));
    $expire=addslashes(trim($_POST['expire']));
    $groupid=addslashes(trim($_POST['groupid']));

    $fileupload = addslashes(trim(basename( $_FILES['file']['name'])));
    $fileType = $_FILES['file']['type'];
    $fileSize = $_FILES['file']['size'];

    $tempFile = $_FILES['file']['tmp_name'];
    $targetPath = dirname( __FILE__ ) . $ds. $foldername . $ds;
    $targetFile =  $targetPath. $fileupload;
    move_uploaded_file($tempFile,$targetFile);


     $uploadsql = mysqli_query($mysqli,"START TRANSACTION;
INSERT INTO files (f_name, f_type, f_size) VALUES ('$fileupload', '$fileType', '$fileSize');
INSERT INTO posts (category, description, posttitle, userid, expire, group_id) VALUES ('updates','$description', '$title','{$_SESSION['userid']}', '$expire','$groupid' );
COMMIT;");

if (!$uploadsql) {
echo mysqli_error($mysqli); 

} else {
echo"successandfile";   

} 

}else {
echo"formnotsubmitted"; 


}

?>

4 个答案:

答案 0 :(得分:2)

mysqli_query()只能执行一个SQL语句。请改用mysqli_multi_query()

在你的情况下:

$uploadsql = mysqli_multi_query($mysqli,"START TRANSACTION;
INSERT INTO files (f_name, f_type, f_size) VALUES ('$fileupload', '$fileType', '$fileSize');
INSERT INTO posts (category, description, posttitle, userid, expire, group_id) VALUES ('updates','$description', '$title','{$_SESSION['userid']}', '$expire','$groupid' );
COMMIT;");

虽然,我倾向于将其拆分以捕获错误并回滚事务。这就是交易的重点。

答案 1 :(得分:0)

使用{$ _SESSION [&#34; userid&#34;]}代替{$ _SESSION [&#39; userid&#39;]}

答案 2 :(得分:0)

在INSERT查询中使用它之前的

var_dump,$ fileType和fileSize变量,这里可能是单引号和双引号的问题......

   var_dump($fileType);
   var_dump($fileSize);

   INSERT INTO files (f_name, f_type, f_size) VALUES ('$fileupload', '$fileType',   
   '$fileSize');

答案 3 :(得分:0)

您向mysqli_query()提出了多个查询。你不能这样做。™

称呼四次,一次为START TRANSACTION,一次为INSERT次操作,一次为COMMIT