PHP PDO无法使用SELECT运行查询INSERT INTO

时间:2016-10-30 21:10:27

标签: php mysql

我无法在一个语句中运行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]:完整性约束违规:1048列   'market_table_id'不能为空

错误说SELECT查询返回null但是当我在phpmyadmin中直接运行$ sql语句时,它正在工作 这是 echo $ sql 输出:

  

INSERT INTO项目(user_id,market_table_id,价格,信息)价值   ('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 ....)查询时,它正在工作。所以DB连接没问题。

2 个答案:

答案 0 :(得分:1)

您应该在DSN中将连接字符集设置为正确的字符串,如

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

(这是针对utf-8,您应该为表编码设置它)

答案 1 :(得分:0)

var应该在select

这样

struct Variables {

    static var CoinsCollected = 0


}