如果您想了解如果满足php条件,如何使用PDO准备语句的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于1、PDO:PDO简介、CodeigniterPDO错误连接注意:尝试获取非对象的属性
如果您想了解如果满足 php 条件,如何使用 PDO 准备语句的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于1、PDO:PDO 简介、Codeigniter PDO 错误连接注意:尝试获取非对象的属性文件名 pdo/pdo_driver.php、Pandas 数据框:按唯一标识符分组,检查条件,如果满足/不满足条件,则对新列应用 1/0、PDO 连接 mysql8.0 报 PDO::__construct (): Server sent charset (255) unknown to the client. Please, report...的有价值的信息。
本文目录一览:- 如果满足 php 条件,如何使用 PDO 准备语句
- 1、PDO:PDO 简介
- Codeigniter PDO 错误连接注意:尝试获取非对象的属性文件名 pdo/pdo_driver.php
- Pandas 数据框:按唯一标识符分组,检查条件,如果满足/不满足条件,则对新列应用 1/0
- PDO 连接 mysql8.0 报 PDO::__construct (): Server sent charset (255) unknown to the client. Please, report...
如果满足 php 条件,如何使用 PDO 准备语句
如何解决如果满足 php 条件,如何使用 PDO 准备语句
如果基于 POST 数据满足条件,我将尝试执行 sql 语句。 附件是打印数组截图的链接,以及它应该查询的表。我没有收到错误消息,但是如果数据确实 = 1,则数据库中不会发生任何事情,这应该根据需要运行 stmt 和 drop/add,而是每次都触发 else 语句。我现在也只是得到一个空白的 html 页面,print_r 和 echos 没有运行。仍然没有错误.... 代码如下,谢谢。 (出于明显原因隐藏了连接信息) https://imgur.com/a/BsnX2hJ
<html>
<head>
<title>Addition Logic</title>
</head>
<body>
<?PHP
$db_host = "host";
$db_username = "username";
$db_pass = "pass";
$db_name = "name";
$pdo = new PDO(''MysqL:host=''.$db_host.'';dbname=''.$db_name,$db_username,$db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$sql = "INSERT INTO product
SELECT new_prod_id,name,company,image FROM add_new_product WHERE new_prod_ID = ''".$key."''
DELETE FROM add_new_product WHERE id = ''".$key."'';";
$stmt = $pdo->prepare($sql);
print_r($_POST);
foreach($_POST as $data)
$key = key($data);
echo $key;
$user_ID = "select user_ID from add_new_product where new_prod_ID =''".$key."'' ";
echo $user_ID;
$username = "select username from users where usersID =''".$user_ID."'' ";
echo $username;
$user_email = "select email from users where usersID = ''".$user_ID."'' ";
echo $user_email;
if ($data == "1"){
$stmt->execute();
echo "Data was 1";
}
else{
$msg = "Hello ''".$username."'',you recently submitted a product to 4UM. We regret to inform you that your product was not approved,likely because of insufficent proof uploaded \\nIf this was not accurate,please resubmit your product with improved proof so we may approve it. \\nThank you for using 4UM!";
$msg = wordwrap($msg,70);
mail($user_email,"4UM New Product Rejection",$msg);
}
?>
</body>
</html>
解决方法
为什么总是看到 else 语句执行的主要问题是因为您在 foreach
上省略了大括号。虽然这是有效的代码,但它只会作为循环的一部分执行下一条语句,而不会执行下面的其他语句。这意味着您的代码实际上正在执行:
foreach($_POST as $data) {
$key = key($data);
}
echo $key;
$user_ID = "select user_ID from add_new_product where new_prod_ID =''".$key."'' ";
echo $user_ID;
...
这意味着在评估您的 if
条件时,$data
将设置为您迭代中的最后一个值,在本例中将是值为 0 的索引 26。
即使您确实添加了大括号,我也不确定您的代码是如何工作的,因为 key
仅适用于数组并“返回当前数组位置的索引元素”,但是,您正在迭代您的 $_POST
数组,根据您的屏幕截图,该数组仅包含 int
作为值。这意味着您的循环将尝试 key(1)
、key(1)
和 key(0)
。
如果您想获取值的索引,可以使用以下命令,其中 $index
将是索引:
foreach($_POST as $index => $data) {
...
假设您修复了上述问题,您的代码应该如下所示:
print_r($_POST);
foreach($_POST as $index => $data) {
...
if ($data == 1) {
$stmt->execute();
echo "Data was 1";
} else {
...
}
}
此外,您正在使用准备好的语句,但使用字符串连接插入 $key
的值,这可以打开 SQLi attacks,您应该改用 bindParam
。如果 $key
旨在成为您的 foreach
内设置的值,您可以在循环内的 bindParam
之前使用 execute
。
1、PDO:PDO 简介
Codeigniter PDO 错误连接注意:尝试获取非对象的属性文件名 pdo/pdo_driver.php
如何解决Codeigniter PDO 错误连接注意:尝试获取非对象的属性文件名 pdo/pdo_driver.php
我正在尝试在 pdo pgsql(第二个数据库)中插入数据,但我很清楚这个注意:试图获取非对象的属性。文件名:pdo/pdo_driver.PHP。
这是我与数据库的连接:
with open(file_path) as csv_file:
data_source = csv.reader(csv_file,delimiter='','')
with open(output_path + ''results.csv'',''w'',newline='''') as results_file:
data_sink = csv.writer(results_file) #This is the important line
for line in data_source:
data_sink.writerow(line)
在我的模型中,我有这个功能(这里只是重要的东西,不完整):
$active_group = ''default'';
$query_builder = TRUE;
$db[''pdo_email''] = array(
''hostname'' => ''pgsql:host=00.00.00.00;dbname=db_name;port=5432'',''username'' => ''user'',''password'' => ''password'',''database'' => ''db_name'',''dbdriver'' => ''pdo'',''dbprefix'' => '''',''pconnect'' => FALSE,''db_debug'' => (ENVIRONMENT !== ''production''),''cache_on'' => FALSE,''cachedir'' => '''',''char_set'' => ''utf8'',''dbcollat'' => ''utf8_general_ci'',''swap_pre'' => '''',''encrypt'' => FALSE,''compress'' => FALSE,''stricton'' => FALSE,''failover'' => array(),''save_queries'' => TRUE
);
解决方法
我使用 POSTGRES 的数据库连接设置:
$active_group = ''default'';
$query_builder = TRUE;
$db[''default''] = array(
''dsn'' => '''',''hostname'' => ''pgsql:host=localhost;dbname=Absences_DB'',''username'' => ''postgres'',''password'' => ''marc'',''database'' => ''Absences_DB'',''dbdriver'' => ''pdo'',''dbprefix'' => '''',''pconnect'' => FALSE,''db_debug'' => (ENVIRONMENT !== ''production''),''cache_on'' => FALSE,''cachedir'' => '''',''char_set'' => ''utf8'',''dbcollat'' => ''utf8_general_ci'',''swap_pre'' => '''',''encrypt'' => FALSE,''compress'' => FALSE,''stricton'' => FALSE,''failover'' => array(),''save_queries'' => TRUE
);
您应该验证是否在 php.ini 文件中启用了 pdo 驱动程序
Pandas 数据框:按唯一标识符分组,检查条件,如果满足/不满足条件,则对新列应用 1/0
如何解决Pandas 数据框:按唯一标识符分组,检查条件,如果满足/不满足条件,则对新列应用 1/0
我有一个关于客户流失的大型数据集,其中每个客户都有一个唯一标识符(编码密钥)。该数据集是一个时间序列,其中每个客户在他们成为客户的每个月都有一行,因此日期和客户标识符列自然包含重复项。我想要做的是添加一个新列(称为“流失”),并根据该特定客户上个月是否作为客户将列设置为 0 或 1。
我尝试了很多方法来做到这一点,但每一种方法都失败了,要么对回溯进行处理,要么就是无法按预期工作。需要注意的是,我对 python 和 Pandas 都很陌生,所以请解释一下,比如我是五岁(笑)。
我尝试使用 pandas groupby 按唯一的客户键对行进行分组,然后检查条件:
df2 = df2.groupby(''customerid'').assign(churn = [1 if date==max(date) else 0 for date in df2[''date'']])
提供回溯,因为 dataframegroupby 对象没有属性分配。
我还尝试了以下方法:
df2.sort_values([''date'']).groupby(''customerid'').loc[df[''date''] == max(''date''),''churn''] = 1
df2.sort_values([''date'']).groupby(''customerid'').loc[df[''date''] != max(''date''),''churn''] = 0
给出了类似的回溯,但由于属性 loc
我也尝试过使用 numpy 方法,如下所示:
df2[''churn''] = df2.groupby([''customerid'']).np.where(df2[''date''] == max(''date''),1,0)
由于 dataframegroupby 再次给出回溯
和:
df2[''churn''] = np.where((df2[''date'']==df2[''date''].max()),df2[''churn''])
不提供回溯,但不能按预期工作,即它对所有行的最大日期的 churn 列应用 1,而不是特定 customerid 的最大日期 - 回想起来,这是完全可以理解的,因为 customerid未在任何地方指定。
任何帮助/提示将不胜感激!
解决方法
IIUC 使用 GroupBy.transform
和 max
返回每组的最大值并与 date
列比较,最后设置 1,0
值通过掩码:
mask = df2[''date''].eq(df2.groupby(''customerid'')[''date''].transform(''max''))
df2[''churn''] = np.where(mask,1,0)
df2[''churn''] = mask.astype(int)
PDO 连接 mysql8.0 报 PDO::__construct (): Server sent charset (255) unknown to the client. Please, report...
安装 mysql8.0 之后,尝试使用 php 连接 mysql,总是报 PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers 错误,网上找了很多资料,然而都没有多大用处。
查找了 mysql 官方说明文档才知道原来 M8.0 已经已经把默认字符集升级成 ut8mb4 了,于是找到 my.cnf 文件,修改如下:
1 [client]
2 port = 3306
3 socket = /tmp/mysql.sock
4 default-character-set = utf8
5
6 [mysql]
7 prompt="MySQL [\d]> "
8 no-auto-rehash
9 default-character-set = utf8
10
11 [mysqld]
12 port = 3306
13 socket = /tmp/mysql.sock
14 default_authentication_plugin = mysql_native_password
15 collation-server = utf8_unicode_ci
16
17 basedir = /usr/local/mysql
18 datadir = /data/mysql
19 pid-file = /data/mysql/mysql.pid
20 user = mysql
21 bind-address = 0.0.0.0
22 server-id = 1
23
24 init-connect = ''SET NAMES utf8''
25 character-set-server = utf8
然后使用 PDO 连接 mysql
$db = array(
''host'' => ''your host'', //设置服务器地址
''port'' => ''3306'', //设端口
''dbname'' => ''your db name'', //设置数据库名
''username'' => ''your name'', //设置账号
''password'' => ''your pwd'', //设置密码
''charset'' => ''utf8'', //设置编码格式
''dsn'' => ''mysql:host=your host;dbname=your db name;port=3306;charset=utf8'',
);
//连接
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //默认是PDO::ERRMODE_SILENT, 0, (忽略错误模式)
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认是PDO::FETCH_BOTH, 4
);
try{
$pdo = new PDO($db[''dsn''], $db[''username''], $db[''password''], $options);
var_dump($pdo);
}catch(PDOException $e){
die(''数据库连接失败:'' . $e->getMessage());
}
结果如下:
object(PDO)#1 (0) { }
今天关于如果满足 php 条件,如何使用 PDO 准备语句的讲解已经结束,谢谢您的阅读,如果想了解更多关于1、PDO:PDO 简介、Codeigniter PDO 错误连接注意:尝试获取非对象的属性文件名 pdo/pdo_driver.php、Pandas 数据框:按唯一标识符分组,检查条件,如果满足/不满足条件,则对新列应用 1/0、PDO 连接 mysql8.0 报 PDO::__construct (): Server sent charset (255) unknown to the client. Please, report...的相关知识,请在本站搜索。
本文标签: