我正在使用PDO连接到MYSQL数据库
数据库中的所有表都有utf8_unicode_ci排序规则
这是我的连接代码:
<?php
$mysql_username = "root";
$mysql_password = "";
$mysql_host = "localhost";
$mysql_database = "cms";
try
{
//connect
global $db;
$db = new PDO('mysql:dbname=' . $mysql_database . ';host=' . $mysql_host . ';charset=utf8;', $mysql_username, $mysql_password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex)
{
die("Unable Connect To DataBase");
}
?>
Run Code Online (Sandbox Code Playgroud)
在localhost我没有编码的问题,但当我上传源到主机我看到?????? 而不是字符?
我遇到了运行doctrine:schema:update --force的问题,原因是forgeign键约束问题.
[Doctrine\DBAL\DBALException] An exception occurred while executing 'ALTER TABLE Product ADD CONSTRAINT FK_1CF73D312ADD6D8C FOREIGN KEY (supplier_id) REFERENCES Supplier (id) ON DELETE SET NULL':
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wic_dev`.`#sql-5c0 a_1a12`, CONSTRAINT `FK_1CF73D312ADD6D8C` FOREIGN KEY (`supplier_id`) REFERENCES `Supplier` (`id`) ON DELETE SET NULL)
[PDOException] SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wic_dev`.`#sql-5c0 a_1a12`, CONSTRAINT `FK_1CF73D312ADD6D8C` FOREIGN KEY (`supplier_id`) …Run Code Online (Sandbox Code Playgroud) 我试图使用WHEREMySQL的条件下PHP PDO从SELECT AS,我得到了错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'total_consumers' in 'where clause'null
Run Code Online (Sandbox Code Playgroud)
我的查询:
SELECT category.* , SUM(Consumer.capacity) AS total_consumers
FROM company AS company
RIGHT JOIN company AS Consumer ON ( Consumer.category_id = company.category_id AND Consumer.company_type = 'Consumer' )
RIGHT JOIN category AS category ON ( category.category_id = company.category_id )
WHERE total_consumers > 0
GROUP BY category.category_title
Run Code Online (Sandbox Code Playgroud)
目标:
我想获取所有记录的inc类别表,并且它们应该作为消费者和生产者存在于公司表中,如果使用者null不选择它
这是上面查询的json结果
如果我删除WHERE条件我得到以下JSON响应
因为你可以看到一些total_consumers : null不应该选择的记录
任何想法如何做我的观点:(为什么我不能在WHERE语句中使用SELECT AS)
WHERE total_consumers …Run Code Online (Sandbox Code Playgroud) 我的代码有什么问题吗?
它返回以下错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 'EXIST test1 ( id INT(6) UNSIGNED AUTO_INCRMENT PRIMARY KEY,firstname VARCHAR(3') 附近使用的正确语法
<?php
$servername = "localhost";
$username = "root";
$password = "passtest";
$database = "daily";
$table = "test1";
$conn = new mysqli($servername, $username, $password, $database);
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
$sql = "CREATE TABLE IF NOT EXIST $table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL
)"; …Run Code Online (Sandbox Code Playgroud) 错误SQL查询:文档
SELECT *
FROM tbl_vehicle_details
INNER JOIN tbl_user, tbl_ride
ON `tbl_vehicle_details`.`v_u_id` = `tbl_user`.`u_id` AND
`tbl_ride`.`r_v_id` =`tbl_vehicle_details`.`v_id`
LIMIT 0, 25
Run Code Online (Sandbox Code Playgroud)
MySQL说:文档
#1064 - 您的SQL语法有错误; 检查与您的MariaDB服务器版本对应的手册,以便在'ON附近使用正确的语法
tbl_vehicle_details.v_u_id=tbl_user.u_idANDtbl_ride.r_v_id='第1行
有没有办法从带有$参数的查询中获取可执行查询。实际上它很奇怪,但是我想在数据库中存储可执行查询。没有参数的完整查询($ 1,$ 2,$ 3)
我正在使用node-postgres
pg.connect(conString, function(err, client, done) {
console.log('Executing Insert query');
client.query('insert into tablename(column1,column2,column3) values($1,$2,$3)',["data1","data2","data3"], function(err, result) {
done();
console.log('finished executing Insert query');
});
});
Run Code Online (Sandbox Code Playgroud)
这就是我所需要的
insert into tablename(column1,column2,column3) values("data1","data2","data3")
Run Code Online (Sandbox Code Playgroud) 我收到一封电子邮件来重置我的密码,但每当我点击链接时,它应该转到我的"change_password.php",但它直接转到我的"index.php",这使得用户无法更改或重置他们的密码密码.
我的链接包含id和code我设置,并且每当发送电子邮件时数据库中的代码都会更新,但它是不起作用的链接.
这就是我的链接:
mywebsite.com/change_password.php?user_id=29&key=233602
但是当我点击它时,它应该引导我到这个页面,我的change_password.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include 'lib/password.php';
$db = new mysqli('localhost', 'user', 'pass', 'db');
if($_GET['user_id']!="" && $_GET['key']!=""):
$id=mysqli_real_escape_string(trim($db,$_GET['user_id']));
$code=mysqli_real_escape_string(trim($db,$_GET['key']));
$fetch=$db->query("SELECT * FROM `profile` WHERE id='$id' AND `code` = '$code'");
$count=mysqli_num_rows($fetch);
if($count!=1) :
header("Location:index.php");
endif;
else :
header("Location:index.php");
endif;
?>
<?php include 'home-header.php'; ?>
</head>
<body>
<?php include 'home-navbar.php'; ?>
<div class="modal-dialog">
<h2>Forgot Password Recovery</h2>
<div class="modal-content col-md-8">
<div class="modal-header">
<h4 class="modal-title"><i class="icon-paragraph-justify2"></i> Change New Password</h4>
</div>
<form method="post" autocomplete="off" id="password_form">
<div class="modal-body …Run Code Online (Sandbox Code Playgroud) 谁能解释这个SQL查询是如何工作的?我一直试图弄明白,但无法得到这个查询背后的逻辑.
select (@a)
from ( SELECT (@a :="")
,(select (@a)
from information_schema.schemata
where (@a) in (@a := concat(@a, schema_name, '<br>'))
)
) a
Run Code Online (Sandbox Code Playgroud) 基本上我在网上阅读了一些文章之后开始使用预备语句,这些文章说这是防止sql注入的简单方法.跳到我的场景,我有一个logExit函数,它将访问者来自我网站的页面和他离开我网站后的页面插入数据库.
public function logExit($url){
$HTTP_REFERER = ($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '');
$REMOTE_ADDR = ($_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : '');
$params = array(
$REMOTE_ADDR,
$HTTP_REFERER,
$url
);
// custom query function ~ prepare/execute
$this->query("
INSERT INTO exits(ip, url_in, url_out) VALUES (?, ?, ?)
", "sss", $params);
}
Run Code Online (Sandbox Code Playgroud)
问题是,今天当我登录管理面板检查我今天有多少访问者以及他们从我的网站离开了哪里时,我收到了大量警报.当我检查我的数据库时,我有13500个从相同的IP退出到不同的页面,但问题来自该url_in领域,这里有一些例子:
ip | url_in | url_out |
-----------+-------------------------------------+---------------|
xx.xx.xx |'"></a><script>alert(11779)</script> | xxxxxxxxxxxxx |
-----------+-------------------------------------+---------------|
xx.xx.xx | ,alert(11774), | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %c0%a7 | xxxxxxxxxxxxx |
-----------|-------------------------------------|---------------|
xx.xx.xx | %2527 | xxxxxxxxxxxxx …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的查询,它必须按连接表中的字段对结果进行分组:
SELECT SQL_NO_CACHE p.name, COUNT(1) FROM ycs_sales s
INNER JOIN ycs_products p ON s.id = p.sales_id
WHERE s.dtm BETWEEN '2018-02-16 00:00:00' AND '2018-02-22 23:59:59'
GROUP BY p.name
Run Code Online (Sandbox Code Playgroud)
表 ycs_products 实际上是 sales_products,列出了每个销售中的产品。我想查看一段时间内每种产品的销售份额。
当前的查询速度是 2 秒,这对于用户交互来说太多了。我需要让这个查询快速运行。有没有办法摆脱Using temporary不规范化?
连接顺序至关重要,两个表中都有大量数据,按日期限制记录数是毋庸置疑的先决条件。
这是解释结果
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: range
possible_keys: PRIMARY,dtm
key: dtm
key_len: 6
ref: NULL
rows: 1164728
Extra: Using where; Using index; Using temporary; Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: p …Run Code Online (Sandbox Code Playgroud)