Я знаю, что эта проблема уже существует, но я не могу понять, как ее решить в моем случае. Я пытаюсь использовать оператор UPDATE с sql, но у меня проблема при работе с краткими строками.php - update sql statement с краткими строками
Это мой код:
$body = file_get_contents('php://input');
$jsonArray = json_decode($body, true);
$sql = array();
foreach ($jsonArray as $row) {
$sql[] = '("'.$row['firstname'].'", "'.$row['lastname'].'", "'.$row['sex'].'", "'.$row['dateOfBirth'].'", "'.$row['email'].'")';
}
$column_name = "(firstname, lastname, sex, dateOfBirth, email)";
$stringImplode = implode(',', $sql);
$action = $mysqli->query('INSERT INTO tbl_syncList '. $column_name .' VALUES '.$stringImplode .'ON DUPLICATE KEY UPDATE XXXXXXX'); // --> I get stuck here
Я не знаю, как я должен писать после KEY UPDATE ON DUPLICATE: Я знаю, что это должно быть что-то вроде "column_name = value1, column_name2 = значение2 ..." но можно ли использовать массивы выше так, как «(column_name1, column_name2 ...) = (value1, value2 ...), которые могли бы быть полезными, если бы я добавлял атрибуты multiples?
Поскольку это находится за пределами цикла. Я не уверен, как ссылаться на мое значение внутри массива sql [], так как у меня могло быть много другого значения для одного и того же имени_ column_name.
Кроме того, я хотел бы добавить ИНЕКЕ в конце что-то вроде «ГДЕ timestamp_column_name < timestamp_value», но я не знаю, если это возможно ..
Если кто-то может помочь мне решить эту проблему это было бы прекрасно.
Спасибо Я попробовать! – Trichophyton
Вы правы. Я не могу использовать тот же подход для обновления данных. Но я не понимаю, почему он не мог работать с условием WHERE следующим образом: ON DUPLICATE KEY UPDATE firstname = VALUES (firstname), ... WHERE timestamp (то есть имя базы данных column_name)
Trichophyton
Я не уверен, чтобы понять, что такое таблица «a» в вашем примере, это мой tbl_syncList происхождения? Или есть более двух таблиц? – Trichophyton