相关疑难解决方法(0)

围绕mysql_real_escape_string()的SQL注入

即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?

考虑这个示例情况.SQL是用PHP构造的,如下所示:

$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)

我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?

像这样的经典注射:

aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)

不工作.

你知道任何可能通过上面的PHP代码注入的注入吗?

php mysql sql security sql-injection

596
推荐指数
4
解决办法
22万
查看次数

MySQL中的多个更新

我知道你可以一次插入多行,有没有办法在MySQL中一次更新多行(如在一个查询中)?

编辑:例如我有以下内容

Name   id  Col1  Col2
Row1   1    6     1
Row2   2    2     3
Row3   3    9     5
Row4   4    16    8
Run Code Online (Sandbox Code Playgroud)

我想将以下所有更新组合到一个查询中

UPDATE table SET Col1 = 1 WHERE id = 1;
UPDATE table SET Col1 = 2 WHERE id = 2;
UPDATE table SET Col2 = 3 WHERE id = 3;
UPDATE table SET Col1 = 10 WHERE id = 4;
UPDATE table SET Col2 = 12 WHERE id = 4;
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-update

363
推荐指数
8
解决办法
36万
查看次数

从PHP中加载.sql文件

我正在为我正在开发的应用程序创建一个安装脚本,需要在PHP中动态创建数据库.我已经有了它来创建数据库,但现在我需要加载几个.sql文件.我曾打算一次打开文件和mysql_query一行 - 直到我查看模式文件并意识到它们不是每行一个查询.

那么,我如何从PHP中加载一个sql文件(如phpMyAdmin的import命令)?

php mysql sql import scripting

65
推荐指数
9
解决办法
13万
查看次数

在PHP中运行MySQL*.sql文件

*.sql在创建新的网站数据库时使用了两个文件.第一个文件创建所有表.第二个文件填充一些默认记录.我想从PHP执行这些文件.我也使用Zend_Framework,如果这将有助于实现这一目标.

附加信息

  1. 我没有控制台访问权限
  2. 我正在尝试从我们的应用程序中自动生成网站.

使用shell_exec()......

$command = 'mysql'
        . ' --host=' . $vals['db_host']
        . ' --user=' . $vals['db_user']
        . ' --password=' . $vals['db_pass']
        . ' --database=' . $vals['db_name']
        . ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');
Run Code Online (Sandbox Code Playgroud)

...我从来没有得到有用的输出,但在另一个线程上遵循一些建议,最后让它全部工作.我切换到命令的格式,而不是执行文件.--option=value--execute="SOURCE ..."<

此外,我从来没有得到shell_exec()和和之间的差异的良好解释exec().

php mysql scripting zend-framework

46
推荐指数
6
解决办法
9万
查看次数

PDO多个查询

从PHP版本5.3开始,PDO_MYSQL驱动程序一直受到支持PDO_MYSQLND.它引入了对多个查询的支持.

但是,如果SELECT传递了多个查询,我无法弄清楚如何获取两个结果集.两个查询都已执行,不能是第二个查询刚刚被转储.

$db->query("SELECT 1; SELECT 2;")->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

返回:

array(1) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "1"
  }
}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

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

如何执行mysql命令DELIMITER

我有很大的问题(对我而言)

我需要DELIMITER |从PHP 执行MySQL命令,但mysql_query()失败并出错.我发现mysql_query()不支持使用DELIMITER,因为这个命令只适用于MySQL控制台

但是当我打开phpMyAdmin时,有一个选项可以在SQL选项卡上更改DELIMITER并且它可以工作,但我不知道如何.

是否可以从PHP更改分隔符?在调用CREATE TRIGGER使用多个命令的命令之前我需要它;.

php mysql

10
推荐指数
1
解决办法
8750
查看次数

无效的PDO查询不会返回错误

下面的第二个SQL语句在phpMyAdmin中返回错误:

SET @num=2000040;
INSERT INTO artikel( artikel_nr, lieferant_nr, bezeichnung_1, bezeichnung_1 )
SELECT @num := @num +1 AS anum, 70338, f2, f3
FROM import
WHERE id >1
Run Code Online (Sandbox Code Playgroud)

MySQL说:

#1110 - Column 'bezeichnung_1' specified twice
Run Code Online (Sandbox Code Playgroud)

全对了.但是,当我使用此函数在Symfony 1.4中运行查询时:

// run sql query
// http://erisds.co.uk/symfony/snippet-creating-debugging-complex-sql-queries-in-symfony
// http://stackoverflow.com/questions/5434702/php-quick-refactoring
// param $sql:    the query to run
// param $silent: bool if errors should be ignored
// throws:        pdo error info if statement failed and $silent=false
// returns:       pdo-statement (use for looping over result rows and error …
Run Code Online (Sandbox Code Playgroud)

mysql pdo

10
推荐指数
1
解决办法
4907
查看次数

如何通过对一个数据表的多次查询来获取多个表数据

如何通过对一个jquery进行多个查询来获取多个表数据dataTable。我想获取多个查询的多个表数据到一个数据表。我可以根据我的代码执行一个查询吗,我尝试了MySQL UNION,不适合我。

Fetch.php

$query1 = "SELECT SUM(score) AS marks, from_date FROM table1 WHERE stat = 0 GROUP BY name ";
$statement = $db->prepare($query1);
$statement->execute();
$output = array('data' => array());
$count = $statement->rowCount();
if($count > 0) {

while($row = $statement->fetch(PDO:: FETCH_OBJ)) {

    $score = $row->marks;
    $date = $row->from_date;
    $Team = "Team 1";

$output['data'][] = array( $score,$date,$Team);     
 } // /while 
}// if num_rows

$query2 = "SELECT SUM(marks) AS marks, from_date FROM table2 WHERE stat = 0 GROUP BY name "; …
Run Code Online (Sandbox Code Playgroud)

php mysql

9
推荐指数
1
解决办法
95
查看次数

使用PDO运行多个查询时如何出错?

我正在使用PDO运行多个查询.如果第二个查询失败,则抛出异常.

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "
DELETE FROM car; 
INSERT INTO car(name, type) SELECT name, from FROM vehicle;
";

try {
    $db->exec($sql);
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码执行时没有抛出异常.

如何确保所有查询都已成功运行?如何查看哪些查询失败?

PS我正在使用PDO多查询来运行MySQL转储,但任何有效的.sql文件都应该有效.

php mysql pdo

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

php/mysql有多个查询

<?php

$query1 = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X";

$query2 = "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH)";

$query3 = "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank
             ON (current_rankings.player = previous_rankings.player)";

$query4 = "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output";

$result = mysql_query($query4) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) {
echo $row['player']. $row['current_rank']. $row['prev_rank']. $row['rank_change'];
} …
Run Code Online (Sandbox Code Playgroud)

php string concatenation while-loop

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