小编Joh*_*ith的帖子

PDO lastInsertId()在重复密钥更新时使用时返回0?

我有一个如下查询:

$a = $members->prepare("insert into a(name) values(:name) 
                            on duplicate key update name = :name");
Run Code Online (Sandbox Code Playgroud)

然后,当我这样做:

$insert_id = $a->lastInsertId()

如果查询成功插入了一行,它将按预期返回插入ID,如果更新了一行,它也将按预期返回更新的行ID(排序).但如果它既没有插入或更新任何东西,因为一切都是相同的,那么它只返回0.

我想这是非常合乎逻辑的默认行为,但有没有办法改变它,以便它可以返回它试图更新的行的id,就像它实际更改行中的某些内容时一样.

谢谢.

php mysql pdo

8
推荐指数
1
解决办法
2681
查看次数

PHP和mySQL(i):如何生成随机用户ID?

如果我想给在我的网站上注册的每个用户一个唯一的ID.在我看来,如果我想这样做,我将不得不:为id创建一个随机数,检查数据库中是否已存在该ID,如果它确实存在则创建另一个随机数并发送另一个查询看看是否存在,依此类推......

这可能会持续很长时间.除了增加id之外,还有什么可行的方法吗?

php mysql

7
推荐指数
1
解决办法
1万
查看次数

PHP和mySQLi:使用prepare语句时是否还需要检查用户输入?

如果我在mySQLi中使用prepare语句,我是否仍然需要以任何方式转义或检查用户输入.例如,如果我有代码:

$members = new mysqli("localhost", "user", "pass", "members");
$r_email = $_POST['r_email'];
$check = $members->prepare("select user_id from users where email = ?");
$check->bind_param('s', $r_email);
$check->execute();
$check->store_result();
if ($check->num_rows > 0) {
    echo "user already registered";
    $check->close();
}
$members->close();
Run Code Online (Sandbox Code Playgroud)

我需要改变$r_email = $_POST['r_email'],以$r_email = mysql_real_escape_string($_POST['r_email']);

谢谢.

php database mysqli sql-injection prepared-statement

3
推荐指数
1
解决办法
740
查看次数

取决于星期几的价格

如果我有一个表格存储一周中不同日期的价格,我将如何根据当天使用相应的列?

表结构:

room_id | mon   | tue   | wed   | thu   | fri   | sat   | sun
1       | 50.00 | 40.00 | 50.00 | 55.00 | 60.00 | 60.00 | 40.00
Run Code Online (Sandbox Code Playgroud)

如果我需要今天的价格(2013年1月1日 - 星期五)room_id#1,那么最好的方法是什么呢?

php mysql sql pdo

2
推荐指数
1
解决办法
118
查看次数

标签 统计

php ×4

mysql ×3

pdo ×2

database ×1

mysqli ×1

prepared-statement ×1

sql ×1

sql-injection ×1