PDO - 绑定参数不适用于长语句

时间:2017-06-22 00:10:52

标签: php mysql pdo

由于某些原因,我的PDO没有将我的数据插入到mysql中。如果我要preg_replace这些东西并将其复制粘贴到mysql终端,它会按预期工作。

$list = [
  "data" => $_POST['data'],
  "c" => $_POST['company'],
  "co" => $_POST['country'],
  "s" => $_POST['state'],
  "su" => $_POST['suburb'],
  "st" => $_POST['street'],
  "ui" => 12
];

$statement = "
INSERT IGNORE INTO location (country, state, suburb, street)
VALUES (:co, :s, :su, :st);

SELECT id INTO @l
FROM location
WHERE
country = :co
AND
state = :s
AND
suburb = :su
AND
state = :st;


INSERT IGNORE INTO company (name)
VALUES (:c);

SELECT id INTO @c
FROM company
WHERE
name = :c;

SELECT id INTO @si
FROM store
WHERE
company_id = @c
AND
location_id = @l;


INSERT INTO map (data, store_id, user_id)
VALUES (:data, @si, :ui );
";
$query = $pdo->prepare($statement);

$temp_s = $statement;

foreach ($list as $key => $val)
{
  $temp_s = preg_replace("/:$key\b/", "'$val'", $temp_s);
  $query->bindParam(":$key", $val);
}

preg_replace的样子:

INSERT IGNORE INTO location (country, state, suburb, street)
VALUES ('Australia', 'Victoria', 'Melbourne', 'test');

SELECT id INTO @l
FROM location
WHERE
country = 'Australia'
AND
state = 'Victoria'
AND
suburb = 'Melbourne'
AND
state = 'test';


INSERT IGNORE INTO company (name)
VALUES ('coles');

SELECT id INTO @c
FROM company
WHERE
name = 'coles';

SELECT id INTO @si
FROM store
WHERE
company_id = @c
AND
location_id = @l;


INSERT INTO map (data, store_id, user_id)
VALUES ('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAH0CAYAAACuOy31AAAc9UlEQ…D9HAIIIIBAi4AQtnxYgwACCCBwmIAQHgbu5xBAAAEEWgR+AanQ2Peo03NfAAAAAElFTkSuQmCC', @si, '12' );

0 个答案:

没有答案