Php 更新时如何插入数据?

Php 更新时如何插入数据?,php,mysql,Php,Mysql,当更新一个有4个表的数据库时,如果一个特定的表没有更新的数据,那么我如何将其插入到该表中 我的数据库是基于搜索引擎优化,所以插入网络信息到所有4个表。这些表按域名索引。所以,若四个表得到了正在更新的域名,那个么它将更新所有表,否则它不会更新。但我想把那个域和信息添加到不具有相同信息的表中 现在我正在使用普通的更新查询 mysql_query("UPDATE LOW_PRIORITY dscrpn SET descr='$descr',title='$title' WHERE web='".mys

当更新一个有4个表的数据库时,如果一个特定的表没有更新的数据,那么我如何将其插入到该表中

我的数据库是基于搜索引擎优化,所以插入网络信息到所有4个表。这些表按域名索引。所以,若四个表得到了正在更新的域名,那个么它将更新所有表,否则它不会更新。但我想把那个域和信息添加到不具有相同信息的表中

现在我正在使用普通的更新查询

mysql_query("UPDATE LOW_PRIORITY dscrpn SET descr='$descr',title='$title' WHERE web='".mysql_real_escape_string($urweb)."'");
就我所知,您不能编写一条语句来更新现有行,或者在不存在的情况下插入新行

您可以做的是发送一个更新,然后检查受更新影响的行数(mysql\u impacted\u rows);如果受影响的行数为零,则执行插入。您可以在MySQL中完成这一切,但我可能只在PHP代码中完成。

请参见

自包含示例(使用):


考虑使用PDO()和重新格式化/重新整理你的问题,这比我的答案更好(我已经投票赞成了)。请注意,它不是标准的SQL。
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$stmt = $pdo->prepare('
    INSERT INTO
        so_dscrpn
        (web,descr,title)
    VALUES
        (?,?,?)
    ON DUPLICATE KEY UPDATE
        descr=VALUES(descr),
        title=VALUES(title)
');
$data = array(
    array('uri1', 'desc1', 'title1'),
    array('uri2', 'desc2', 'title2'),
    array('uri1', 'desc3', 'title3')
);
foreach($data as $row ) {
    $stmt->execute($row);
}

foreach( $pdo->query('SELECT * FROM so_dscrpn', PDO::FETCH_ASSOC) as $row ) {
    echo join(', ', $row), "\n";
}

function setup($pdo) {
    $pdo->exec('
        CREATE TEMPORARY TABLE so_dscrpn (
            web varchar(48) NOT NULL,
            descr varchar(48),
            title varchar(48),
            unique key(web)
        )
    ');
}
uri1, desc3, title3
uri2, desc2, title2