Laravel - PDO - ชื่อตารางแบบไดนามิก

ฉันกำลังพยายามลบตารางที่มีชื่อไดนามิก จริงๆ แล้ว ฉันสร้างและจัดการตารางแบบไดนามิก แต่นี่เป็นแบบสอบถามที่ง่ายที่สุด

ทุกอย่างทำงานได้ดีเมื่อฉันใช้ Raw PDO เช่น:

// PURE PDO VERSION
$this->db = new PDO(
    'mysql:host='   . $configParams['db_hostname']
    . ';port='      . $configParams['db_port']
    . ';dbname='    . $configParams['db_name']
    . ';charset=utf8mb4',
    $configParams['db_username'],
    $configParams['db_password']
);

$this->ps_DeleteTempTable = $db->prepare(
            "DROP TABLE `:tableName`"
        );

แต่เมื่อฉันทำแบบเดียวกันโดยใช้ Laravel ก็เป็นดังนี้:

// LARAVEL VERSION
$pdo = DB::connection()->getPdo();

$this->ps_DeleteTempTable = $pdo->prepare(
            "DROP TABLE `:tableName`"
        );

ฉันได้รับข้อผิดพลาดต่อไปนี้:

SQLSTATE [42S02]: ไม่พบตารางฐานหรือมุมมอง: 1146 ตาราง 'testdb.?' ไม่มีอยู่จริง

ฉันเคยเห็นคำถามอื่นๆ เกี่ยวกับ SO ที่มีจุดประสงค์คล้ายกัน แต่คำถามเหล่านี้ทั้งหมดแนะนำว่าแบบสอบถามแรกที่ฉันเขียนไม่สามารถใช้งานได้ ในขณะที่ฉันใช้มันมานานกว่าหนึ่งปีแล้ว

ขอบคุณ,


person mils    schedule 07.06.2017    source แหล่งที่มา
comment
หากคุณใช้งานได้จริง ฉันไม่สามารถอธิบายได้ - เนื่องจากตัวยึดตำแหน่งควรใช้กับค่าเท่านั้น ไม่ใช่ชื่อคอลัมน์หรือตาราง   -  person Qirel    schedule 07.06.2017
comment
ฉันทำให้มันทำงานโดยใช้ backticks ฉันสร้าง/แทรก/อัปเดต/ลบโดยไม่มีปัญหา มันแปลกที่เมื่อผ่าน laravel มันหยุดทำงาน   -  person mils    schedule 07.06.2017
comment
นี่ค่อนข้างลึกลับหากคุณทำให้มันใช้งานได้จริง... เพราะเมื่อเตรียม singlequotes จะถูกเพิ่มรอบค่าโดยอัตโนมัติ - คุณ ควร ได้รับข้อความค้นหาที่ดูเหมือน DROP TABLE `testdb.'table'` ซึ่งไม่ถูกต้องหรือไม่ คุณใช้งาน PHP และ MySQL เวอร์ชันใดอยู่ คุณช่วยแสดงวิธีดำเนินการผูกด้วยได้ไหม?   -  person Qirel    schedule 07.06.2017


คำตอบ (1)


คุณควรเพิ่มชื่อตารางเป็นค่าเมื่อสร้าง SQL...

$pdo = DB::connection()->getPdo();

$this->ps_DeleteTempTable = $pdo->prepare(
            "DROP TABLE `".$tableName."`"
        );

คุณอาจได้ผลลัพธ์แปลกๆ เมื่อไม่ใช้เครื่องหมายย้อนกลับ เนื่องจากชื่ออาจเป็นคำสงวน โดยทั่วไป จะดีกว่าถ้าออกแบบฐานข้อมูลไม่ให้ใช้สิ่งเหล่านี้ แต่บางอันก็ค่อนข้างธรรมดา (เช่น 'ลำดับ')

person Nigel Ren    schedule 07.06.2017