Перезаписать данные в postgresql таблице php - PullRequest
0 голосов
/ 18 мая 2018

Данные, представленные в таблице postgresql, больше не обновляются.Я хочу перезаписать данные.Когда я просто использую вставку в, новые данные добавляются, но старые данные остаются.Я пытался использовать обновление, но затем я получаю ошибки.Я хотел бы обновить все записи.Я думаю, что это, вероятно, что-то с синтаксисом.Но я не могу найти проблему.

Код

$dbname = "dbtest";
$host = "localhost";
$username = "postgres";
$password = "pasword";

$dbh = new PDO("pgsql:dbname=$dbname; host=$host", $username, $password);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$c = array("Human","Mouse","Rat","Hamster","SV40");       
$b = array("Human HBO gene", "Mouse BB gene", "Human CCB gene", "SV40 TP gene", "Hamster TP53 gene");
$count=0;
foreach($c as $key => $d){
    $e =$b[$key];
    $name = $count++;
    if (strpos($e, $d) !== FALSE) {
        $match = $d;
        $specie = $d;
        $specie = str_replace("Human","Homo Sapiens",$specie);
        $specie = str_replace("Mouse","Mus Musculus",$specie);
        $specie = str_replace("Rat","Rattus norvegicus",$specie);
        $Specie = str_replace("Hamster", "Mesocricetus Auratus",$specie);
        $specie = str_replace("SV40","Simian virus 40",$specie);
    }else{
        $match = "0";
        $specie = "0";
    }

echo $match. " ". $specie. " ";

$var_id = $name;
$var_match = $match;
$var_full_name = $specie;


    #$sql = "INSERT INTO species (id,match,full_name) VALUES ('".$var_id."','".$var_match ."','".$var_full_name."')";
    $sql = "UPDATE species SET id = '".$var_id."', match = '".$var_match ."', full_name='".$var_full_name."'";
    if ($dbh->query($sql)) {
        echo "New Record Inserted Successfully!<br \>\n";
    }else{
        echo "Data not successfully Inserted.<br \>\n";
    } 
}

Полученная ошибка:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [42601]: Синтаксическая ошибка: 7 ОШИБКА:> синтаксическая ошибкав или около "Sapiens" ЛИНИЯ 1: ... вид SET id = '0', match = Human, full_name = Homo Sapiens '^ in /var/www/html/test/Insert.php:59 Трассировка стека: # 0/var/www/html/test/Insert.php(59): запрос PDO-> ('ОБНОВЛЕНИЕ вида ...') # 1 {main} добавлен в /var/www/html/test/Insert.php в строке59

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы должны использовать запрос выбора, чтобы определить, является ли значение новым или старым.Если старые данные обновления, в противном случае вставьте данные.

ФУНКЦИЯ

function execute_query($query,$dbh){
    if ($dbh->query($query)) {
        return "New Record Inserted Successfully!<br \>\n";
    }else{
        return "Data not successfully Inserted.<br \>\n";
    } 
}

ВЫБРАТЬ

$query = 'SELECT * FROM tbl '. 'WHERE "test1" = '. 
        "'".$var_test."'" . 'AND "test2" = '. 
        "'".$var_test2."'";
        $stmt = $dbh->prepare($query);
        $stmt->execute();
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

        $outcome = $stmt->fetch();

ОБНОВЛЕНИЕ

        if ($outcome !== false){
            $sql = "UPDATE tbl SET test1 = '".$var_test1."', test2 = '".$var_test2."', 
            test3 = '".$var_test3."'
            "WHERE id = '".$var_id."' ";
            execute_query($sql,$dbh);

ВСТАВИТЬ

    }else{    
        $sql = "INSERT INTO genes 
        (id,test1,test2,test3) 
        VALUES ('".$var_id."','".$var_test1 ."','".$var_test2."','".$var_test3."')";
        execute_query($sql,$dbh);
    }
0 голосов
/ 24 мая 2018

Когда я использую следующий синтаксис, ошибка исчезает.Этот запрос необходимо использовать для обновления.

$sql = "UPDATE species SET match ='".$var_match ."', full_name='".$var_full_name."' WHERE id = '".$var_id."' ";
...