我在 MYSQLI 查询上收到错误,指出第 2 行的语法有错误。我已添加/修剪了所有变量,因此逗号/点不应该破坏命令。但是,一个问题是我的文件名确实包含空格,所以我不确定 Trim
是否是一个好的选择,因为它删除了空格,这是第二个问题。
我有以下 php/mysql 代码:
它给了我错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'INSERT INTO files (f_name, f_type, f_size) VALUES ('ISYF.doc', 'application/mswo' at line 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";
}
?>
最佳答案
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;");
尽管如此,我倾向于将其拆分以捕获错误并回滚事务。这就是交易的全部意义。
关于php - MySQL 查询语法和修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657053/