php - MySQL 查询语法和修剪

标签 php mysql mysqli

我在 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/

相关文章:

php - 将 IN 与数组一起使用时如何使用多个 WHERE 语句

c# - 使用 c# 列出来自 mysql 服务器的所有数据库

PHP函数mysqli_bind_param参数错误

php - Zabbix 导出图形 (.PNG) 文件

php - Laravel 模型中的默认随机值

php - mysql 中的请求不发送任何数据,除了 phpmyadmin 中的请求

c# - 使用 dapper 为 MySql 附加参数

mysql - SQL 左 JOIN 有 4 列

php - mysql_num_rows错误

php - 前段时间函数未返回正确的值