简体   繁体   English

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

[英]PHP PDO can't run query INSERT INTO with SELECT

I can't run INSERT INTO and SELECT queries in one statement. 我无法在一条语句中运行INSERT INTO和SELECT查询。

Have problem with this php code: 有这个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();
    }
}

And I got error: 我得到了错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'market_table_id' cannot be null SQLSTATE [23000]:违反完整性约束:1048列“ market_table_id”不能为空

Error says SELECT query returns null but when I run $sql statement directly in phpmyadmin, it is working. 错误说SELECT查询返回null,但是当我直接在phpmyadmin中运行$ sql语句时,它正在工作。
This is echo $sql output: 这是echo $ 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') 插入项(user_id,market_table_id,价格,信息)值('12345678',(从市场WHERE city ='ANKARA'AND market ='MİGROS'的SELECT table_id),22.33,'TEST_INFO_MİGROS')

What's wrong with me? 我怎么了 Maybe it's my db connection: 也许是我的数据库连接:

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;
}

Is it possible to run "INSERT INTO...SELECT..." query with PDO? 是否可以使用PDO运行“ INSERT INTO ... SELECT ...”查询? If yes how, if no why? 如果是,如何,如果不,为什么?

PS: It's working when I enter any integer instead of (SELECT....) query. PS:当我输入任何整数而不是(SELECT ....)查询时,它就起作用了。 So no problem with DB connection. 因此,数据库连接没有问题。

You should set connections charset to proper one in DSN like 您应该在DSN中将连接字符集设置为正确的字符集,例如

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

(This is for utf-8, you should set it for your tables encoding) (这是针对utf-8的,您应该为表编码设置它)

the var should be inside the select var应该在select里面

This way 这条路

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM