2016-10-30 83 views
0

我無法在一條語句中運行INSERT INTO和SELECT查詢。PHP PDO無法運行查詢INSERT INTO與SELECT

有問題,這個PHP代碼:

$db = connect_db_marketlist(); 
if($db != null) { 
    $sql = "INSERT INTO items (user_id, market_table_id, price, info)" 
     ." VALUES ('$id', (SELECT table_id FROM markets WHERE city='$city' AND market='$market'), $price, '$info')"; 
    echo $sql; // !!! DEBUG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    try { 
     $db->query($sql); 
     echo "OKAY: ".$db->lastInsertId(); 
    } catch (Exception $e) { 
     echo "ERROR: ".$e->getMessage(); 
    } 
} 

而且我得到了錯誤:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'market_table_id' cannot be null

錯誤表示SELECT查詢返回null,但是當我直接在phpMyAdmin運行$ sql語句,這是工作。
這是回聲$ SQL輸出:

INSERT INTO items (user_id, market_table_id, price, info) VALUES ('12345678', (SELECT table_id FROM markets WHERE city='ANKARA' AND market='MİGROS'), 22.33, 'TEST_INFO_MİGROS')

這有什麼錯嗎?也許這是我的數據庫連接:

function connect_db_marketlist() { 
    $servername = "localhost"; 
    $username = "marketuserdb"; 
    $password = "pass1234"; 
    $conn = null; 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=marketlist", $username, $password); 
     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
    catch(PDOException $e) 
     { 
     echo "Connection failed: " . $e->getMessage(); 
     } 
    return $conn; 
} 

是否有可能使用PDO運行「INSERT INTO ... SELECT ...」查詢?如果是的話,如果沒有,爲什麼?

P.S:當我輸入任何整數而不是(SELECT ....)查詢時,它正在工作。所以數據庫連接沒有問題。

+0

請問你可以共享echo $ sql的輸出嗎?這可以幫助我們瞭解你的情況。 – tanaydin

+0

是的,您可以在pdo中運行insert ... select ...。你像運行其他sql語句一樣運行它。 – Shadow

+0

PDO在這裏沒有任何關係。 –

回答

1

您應該設置連接字符集,以適當的一個在DSN像

"mysql:host=$servername;dbname=marketlist;charset=utf8mb4" 

(這是UTF-8中,你應該把它設置爲你的表格編碼)

+1

Thx。你節省了我的時間:) – Kuvalya

0

的VAR應該是選擇

這樣

"INSERT INTO items (user_id, market_table_id, price, info)" 
." SELECT '$id', table_id , $price, '$info' 
     FROM markets WHERE city= '$city' AND market='$market' ;"; 
+0

我想只用(SELECT ...)語句獲取market_table_id,而不是價格,信息,用戶。 – Kuvalya

+0

爲什麼不......如果你使用這個選擇,你直接填充插入列...在選擇你選擇var $ id,$ price,$ info的內容..這個值不是從表中選擇的。 。但通過..(注入)在sql語句中。 – scaisEdge