INSERT INTOとSELECTクエリを1つのステートメントで実行することはできません。PHP PDOがSELECTを使用してINSERT INTOを実行できない
は、この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')
?多分私のdb接続です:
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接続に問題はありません。
あなたもecho $ sqlの出力を共有してください。それはあなたの状況を理解するのに役立ちます。 – tanaydin
はい、pdoでinsert ... select ...を実行できます。他のSQL文と同じ方法で実行します。 – Shadow
PDOには何も関係ありません。 –