我在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";
}
?>
答案 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)
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
。