我正在使用PDO插入记录(mysql和php)
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
有没有办法知道它是否成功插入,例如,如果没有插入记录,因为它是重复的?
编辑:当然我可以查看数据库,但我的意思是程序化反馈.
我已经尝试按照PHP.net的说明进行SELECT查询,但我不确定这样做的最佳方法.
我想使用参数化SELECT查询,如果可能的话,返回ID表中name字段与参数匹配的表.这应该返回一个,ID因为它将是唯一的.
然后我想将它ID用于INSERT另一个表,所以我需要确定它是否成功.
我还读到您可以准备查询以供重用,但我不确定这有何帮助.
迁移远离mysql库后我正在使用PDO.我用什么代替旧mysql功能?
我需要转义单引号,以便它们进入我的数据库,我认为可能有更好的方法来处理这个,而不添加(斜)所有字符串的斜杠.有人可以告诉我应该使用的是什么吗?
我已经在Stack Overflow上重复了几次这个问题,但是没有一个能够充分探索这个问题(或者至少以一种对我有帮助的方式)
问题是数据库查询应该在PHP中为整数列返回整数数据类型.相反,查询将每列作为字符串类型返回.
我确保"PDO :: ATTR_STRINGIFY_FETCHES"为false,以确保结果不会被转换为字符串.
我见过的答案:
根据我的研究,我了解这是一个驱动程序实现问题.
许多消息来源声称MySQL本机驱动程序不支持返回数字类型.这似乎不正确,因为它适用于Mac OS X.除非他们的意思是" Linux上的MySQL本机驱动程序不支持该功能".
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处.我一直在尝试识别差异以便应用修复,但我受限于我对如何检查这些内容的了解.
php -i
PDO_MYSQL
用于MySQL的PDO驱动程序=>已启用客户端API版本=> 5.1.72
php -i
PDO_MYSQL
用于MySQL的PDO驱动程序=>启用客户端API版本=> mysqlnd 5.0.10 - 20111026 - $ Id:e707c415db32080b3752b232487a435ee0372157 $
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS …Run Code Online (Sandbox Code Playgroud) 我有2个数据库字段
`decval` decimal(5,2)
`intval` int(3)
Run Code Online (Sandbox Code Playgroud)
我有2个pdo查询更新它们.更新int的那个工作正常
$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)
但我无法更新小数字段.我尝试了以下3种方法,但没有任何效果
$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval->bindParam(':decval', $decval);
Run Code Online (Sandbox Code Playgroud)
看来问题出在数据库类型上decimal?是否存在PDO::PARAM类型的字段decimal?如果没有,我将使用什么作为解决方法?
我有一个PDO的问题,我很想在被它困扰很长一段时间后得到答案.
举个例子:
我将一个ID数组绑定到PDO语句,以便在MySQL IN语句中使用.
该数组将是:$ values = array(1,2,3,4,5,6,7,8);
数据库安全变量是$ products = implode(','$ values);
因此,$ products将成为STRING,其值为:'1,2,3,4,5,6,7,8'
声明如下:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (:products)
Run Code Online (Sandbox Code Playgroud)
当然,$产品将被声明为:产品.
但是,当编译语句并绑定值时,它实际上看起来像这样:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN ('1,2,3,4,5,6,7,8')
Run Code Online (Sandbox Code Playgroud)
问题是它将IN语句内部的所有内容作为单个字符串执行,因为我已将其准备为逗号分隔值以绑定到语句.
我真正需要的是:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (1,2,3,4,5,6,7,8)
Run Code Online (Sandbox Code Playgroud)
我实际上可以实现这一点的唯一方法是将值放在字符串本身而不绑定它们,但我知道必须有一种更简单的方法来执行此操作.
在检索数据之前,我总是要输入:
$STH->setFetchMode(PDO::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)
为了使我的代码更具可读性,如果我可以在某处设置默认模式,那将会很棒....
谢谢!
编辑.我本来希望我可以将PDO:FETCH_OBJ添加到我连接到数据库时运行的setAttribute代码,但这似乎不起作用......
是否PDO::PARAM_???存在可用于日期或时间戳的某些内容?
示例代码:
$sql = "UPDATE my_table SET current_date = :date WHERE id = 43";
$statement = $pdo->prepare ($sql);
$statement->bindParam (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR);
$statement->execute ();
Run Code Online (Sandbox Code Playgroud) 只是一个简单的问题.
在循环中使用PDO :: fetchAll()和PDO :: fetch()之间是否有任何性能差异(对于大型结果集)?
我正在获取用户定义类的对象,如果这有任何区别.
我最初没有受过教育的假设是fetchAll可能更快,因为PDO可以在一个语句中执行多个操作,而mysql_query只能执行一个.但是我对PDO的内部工作知之甚少,而且文档没有说明这一点,以及fetchAll()是否只是一个转储到数组中的PHP端循环.
有帮助吗?