Как использовать PHP готовить с миллионами полей разных типов - PullRequest
2 голосов
/ 18 апреля 2020

Я вставляю данные с типами VARCHAR, TIMESTAMP и DECIMAL с использованием prepare.

Данные уже в формате, необходимом для mySQL.

Моя проблема заключается в следующем. Предположим, у меня было только 2 элемента для вставки. Я хотел бы сделать так:

$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);

Моя проблема заключается в части связывания. Как выполнить связывание, когда мне нужно вставить 40 столбцов одновременно?

Я могу справиться с подготовительной частью, выполнив следующее:

$sql = "INSERT INTO customers ($columns) VALUES ($values)";
$stmt = $mysqli->prepare($sql);

Но следующая строка приведет к нелепая длинная линия, непонятная и очень просто go неправильная.

 $stmt->bind_param("ssssiidisisssiidiisssidiisidi", ....); 

Я не понимаю, как я мог бы построить это, например, в oop.

Как я делаю это?

1 Ответ

3 голосов
/ 18 апреля 2020

Вы можете передать массив в функцию mysqli_stmt::bind_param() как переменные аргументы с синтаксисом ..., представленным в PHP 5.6.

$params = ['name', 42];

$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param(str_repeat('s', count($params)), ...$params);
$stmt->execute();

Вам не нужно устанавливать данные введите индивидуально для каждого столбца. Вы можете рассматривать их как 's'.


Я знаю, что вы спрашиваете о mysqli, но я просто укажу, что с PDO это проще:

$params = ['name', 42];

$stmt = $pdo->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->execute($params);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...