【问题标题】:PHP, Create a mySQL table with a variable name that includes an underscorePHP,使用包含下划线的变量名创建一个 mySQL 表
【发布时间】:2021-07-17 04:14:24
【问题描述】:

我正在尝试创建包含名称的 php 变量的 mySQL 表。

$papername=$_POST['txtpname'];
$papertype=$_POST['txtptype'];

$searchForValue = ',';


if (strpos($papertype, $searchForValue) !== false) {
    
    $str_arr = explode (",", $papertype); 
    
    foreach ($str_arr as $value) {
        
        $value = trim($value);
        
        $value = preg_replace('/\s+/', '_', $value);
        
        $value = $papername.'_'.$value;
        
        
        $create=$pdo->prepare("CREATE TABLE ".$value."  (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        product_type VARCHAR(30) NOT NULL, gsm VARCHAR(500) NOT NULL) ;");
        
        $create->execute();
        
    }
    
}

但是,当我将两个变量与下划线组合在一起(行:$value = $papername.'_'.$value;)并将其作为表名时,我得到一个 SQL 语法错误。

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, product_type VAR...' at line 1 in C:\xampp\htdocs\designshoppos\addpapertype.php:36 Stack trace: #0 C:\xampp\htdocs\designshoppos\addpapertype.php(36): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\designshoppos\addpapertype.php on line 36

但是,当我删除行:$value = $papername.'_'.$value; 时,查询运行正常。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: php mysql variables pdo syntax-error


    【解决方案1】:

    通过在表名周围添加引号将解决此问题。如果您修剪并去除 $papername 中的所有空格,这将是一个很好的做法,这也将使其工作。

    $papername = preg_replace('/\s+/', '_', trim($papername));

    【讨论】:

      【解决方案2】:

      我认为您只是缺少引号。应该使用刻度对其进行转义。

      $create=$pdo->prepare("CREATE TABLE `".$value."` (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, product_type VARCHAR(30) NOT NULL, gsm VARCHAR(500) NOT NULL) ;");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-20
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        相关资源
        最近更新 更多