Я не могу запускать запросы 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, запрос возвращает пустой, но когда я запускаю $ SQL заявление непосредственно в PHPMyAdmin, она работает ,
Это эхо $ 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;
}
Можно ли запустить "INSERT INTO ... SELECT ..." запрос с PDO? Если да, то как, если нет, почему?
P.S: Он работает, когда я ввожу любое целое число вместо запроса (SELECT ....). Поэтому проблем с соединением DB нет.
Не могли бы вы поделиться и выходом эха $ sql? Это может помочь нам понять вашу ситуацию. – tanaydin
Да, вы можете запустить insert ... select ... in pdo. Вы запускаете его так же, как и любой другой оператор sql. – Shadow
PDO здесь не имеет никакого отношения. –