Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQLSTATE[42000]:Błąd składni lub naruszenie dostępu:1064

Oto przyczyna błędu:

$this->data->query('CREATE TABLE $this->subdomain');
$this->data->bind(':subdomain', $this->subdomain);

Jak zauważyli Michael Berkowski i andrewsi w komentarzach, nie można powiązać wartości z :subdomain symbol zastępczy, ponieważ nie jest to odnotowane w zapytaniu, a nawet jeśli jest, elementy zastępcze PDO mogą być używane tylko dla wartości, a nie nazw baz danych, tabel lub kolumn .

Jeśli chcesz, aby tego rodzaju zapytania SQL były tworzone dynamicznie, musisz zawrzeć nazwy baz danych, tabel lub kolumn w cudzysłowie z zaznaczeniem (w przypadku, gdy Twoje kolumny i nazwy zawierają zastrzeżone słowa kluczowe SQL, które mogą przerwać zapytanie) i wartości specjalne które są umieszczone, ale nie możesz użyć MySQLi w tym celu, jeśli już używasz PDO .

Ponieważ PDO nie jest dostarczane z real_escape_string() metoda, która właśnie to zrobi, aw praktyce nie ma potrzeby zmiany znaczenia wartości w ten sposób (chyba że naprawdę masz kolumny o nazwach takich jak Ye'name co jest całkowicie głupim IMHO), więc prosty filtr za pomocą preg_match() lub preg_replace() jest wystarczająco dobry:

if (preg_match('/^[\w_]+$/i', $this->subdomain)) {
    // note the ` (backtick), and using " (double quotes):
    $this->data->query("CREATE TABLE `{$this->subdomain}`"); 
} else {
    // throw exception or error, do not continue with creating table
}

Tylko kilka przykładów użycia ' (pojedynczy cytat - apostrof) przeciwko " (podwójne cudzysłowy) ciągi w PHP:

$a = 1;
$b = 2;
echo '$a + $b'; // outputs: $a + $b
echo "$a + $b"; // outputs: 1 + 2
$c = array(5, 10);
echo '\$c[0] = {$c[0]}'; // outputs: \$c[0] = {$c[0]}
echo "\$c[0] = {$c[0]}"; // outputs: $c[0] = 5

{} Wewnątrz podwójnych cudzysłowów ciąg znaków jest używany do tablic i dostępu do właściwości obiektu i może być używany wokół zwykłych zmiennych.
Uciekanie $ w podwójnych cudzysłowach wykonuje \$ w przeciwnym razie przyjmie zmienne wywołanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dopasować dwie wartości z 1 kolumny w MYSQL?

  2. Jak podłączyć flutter do bazy danych mysql localhost

  3. Laravel Eloquent zapytanie JSON kolumna z Where In?

  4. Zwróć zarówno wynik zapytania, jak i liczbę wierszy

  5. Perl:Jak skopiować/odbić zdalne tabele MYSQL do innej bazy danych? Może też inna struktura?