2015-11-18 47 views
-2

你好我想转换的SQL语句转换成一个PHP查询

INSERT INTO destTable 
SELECT Field1,Field2,Field3,... 
FROM srcTable 
WHERE NOT EXISTS(SELECT * 
       FROM destTable 
       WHERE (srcTable.ID=destTable.ID) 
       ) 

这段代码转换成一个PHP查询。这是我迄今为止的,但它的错误。

mysql_query('INSERT INTO ' . $targetDB . 'SELECT * FROM' . $sourceDB . 'WHERE NOT EXISTS(SELECT * FROM' . $targetDB . 'WHERE ('. $targetDB . '`.` ID ='. $sourceDB . '`.` ID)' 

您可以调整它使其正确吗?

+4

** ** STOP不推荐使用'mysql_ *'API。改为使用'mysqli_ *'或'PDO'。 – Jens

+0

Your backtics are not correct – Jens

+0

'mysql_query('INSERT INTO'。$ targetDB。'SELECT * FROM'。$ sourceDB。'WHERE NOT EXISTS(SELECT * FROM'。$ targetDB。'WHERE('。$ targetDB。'。 ID ='。$ sourceDB。'.ID)'' – sinaza

回答

1

你可以尝试一些使用PDO以及验证您的表变量白名单排列如下:使用

define('DB_HOST', 'localhost'); 
define('DB_NAME', 'your_database'); 
define('DB_USER', 'your_username'); 
define('DB_PASSWORD', ''); 

try { 
    //Make your connection handler to your database 
    $conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 

    $tables = array('table1', 'table2', 'table3'); 
    if (in_array($targetDB, $tables) && in_array($sourceDB, $tables)) { 
     $sql = "INSERT INTO $targetDB (SELECT * FROM $sourceDB WHERE NOT EXISTS (SELECT * FROM $targetDB WHERE $targetDB.ID = $sourceDB.ID))"; 
     $stmt = $conn->prepare($sql); 
     $stmt->execute(); 
    } else { 
     echo 'Wrong tables'; 
    } 

} catch(PDOException $e) { 
    echo $e->getMessage(); 
    die(); 
} 
1

你只是缺少一些空间和增加不必要的报价

'INSERT INTO ' . $targetDB . ' SELECT * FROM ' . $sourceDB . ' WHERE 
NOT EXISTS(SELECT * FROM ' . $targetDB . ' WHERE ('. $targetDB . '.ID ='. $sourceDB . '.ID)'