[MysqlQueryMysqlErrorWithLinkRector] Remove already existing connection parameter from function call (#4793)

* Remove already existing connection parameter in function call

* CS Fixer
This commit is contained in:
Krystian Marcisz 2020-12-05 21:26:46 +01:00 committed by GitHub
parent 47a9a52ffd
commit 69b63de4d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 0 deletions

View File

@ -50,6 +50,29 @@ final class MysqlQueryMysqlErrorWithLinkRector extends AbstractRector
'mysql_thread_id' => 'mysqli_thread_id',
];
/**
* @var array<string, int>
*/
private const FUNCTION_CONNECTION_PARAMETER_POSITION_MAP = [
'mysql_affected_rows' => 0,
'mysql_client_encoding' => 0,
'mysql_close' => 0,
'mysql_errno' => 0,
'mysql_error' => 0,
'mysql_get_host_info' => 0,
'mysql_get_proto_info' => 0,
'mysql_get_server_info' => 0,
'mysql_info' => 0,
'mysql_insert_id' => 0,
'mysql_ping' => 0,
'mysql_query' => 1,
'mysql_real_escape_string' => 1,
'mysql_select_db' => 1,
'mysql_set_charset' => 1,
'mysql_stat' => 0,
'mysql_thread_id' => 0,
];
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
@ -114,6 +137,8 @@ CODE_SAMPLE
) {
$connectionVariable = $this->findConnectionVariable($node);
$this->removeExistingConnectionParameter($node);
if ($connectionVariable === null) {
return null;
}
@ -129,6 +154,18 @@ CODE_SAMPLE
return null;
}
private function removeExistingConnectionParameter(FuncCall $funcCall): void
{
/** @var string $functionName */
$functionName = $this->getName($funcCall);
if (! isset(self::FUNCTION_CONNECTION_PARAMETER_POSITION_MAP[$functionName])){
return;
}
$connectionPosition = self::FUNCTION_CONNECTION_PARAMETER_POSITION_MAP[$functionName];
unset($funcCall->args[$connectionPosition]);
}
private function isProbablyMysql(Node $node): bool
{
if ($this->isObjectType($node, 'mysqli')) {

View File

@ -0,0 +1,29 @@
<?php
namespace Rector\MysqlToMysqli\Tests\Rector\FuncCall\MysqlQueryMysqlErrorWithLinkRector\Fixture;
class ConnectionProvided
{
public function run()
{
$link = mysqli_connect('host', 'user', 'pass');
$res = mysql_query("INSERT INTO ", $link) or die (mysql_error());
}
}
?>
-----
<?php
namespace Rector\MysqlToMysqli\Tests\Rector\FuncCall\MysqlQueryMysqlErrorWithLinkRector\Fixture;
class ConnectionProvided
{
public function run()
{
$link = mysqli_connect('host', 'user', 'pass');
$res = mysqli_query($link, "INSERT INTO ") or die (mysqli_error($link));
}
}
?>