(mysql_real_escape_string) richtig anwenden?

3 Antworten

Richtig ist die zweite Variante. Gewöhne dir allgemein an, bei solchen Fragen direkt in die offizielle Dokumentation zu schauen:

http://php.net/manual/de/mysqli.real-escape-string.php

Dort findest du auch immer gute Beispiele. Ich empfehle statt dem Escapen den moderneren Ansatz der Prepared Statements: 

http://php.net/manual/de/mysqli.quickstart.prepared-statements.php

https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection

Gegen XSS kannst du dir auch mal die Content Security Policy anschauen.

Die zweite Variante ist richtig.

INSERT INTO wird doppelt eingetragen warum (MySQL)?

Hallo zusammen,

leider finde ich den Fehler nicht hab ihr ne Idee warum mein Formular doppelt Eingetragen wird ? Hier der Code:

if(isset($_GET["sub-manuel"])){
	$addr = $_POST["address"];
	$currencyid = $_POST["currencyid"];
	$coins = str_replace(",", ".", $_POST["coins"]);
	$cost_currency = $_POST["cost_currency"];
	$cost_cash = str_replace(",", ".",$_POST["cost_cash"]);
	$cost_eur = $cost_cash;
if(!empty($addr)) {
    $address = $addr;
}
else {
    $address = "novalue";
}

$balance = number_format($coins, 12);
$symbol = findCryptoSymbol($currencyid);

$query ="INSERT INTO coins (user_id, currencyid, symbol, address, coins, cost_eur, status) VALUES (:user_id, :currencyid, :symbol, :address, :coins, :cost_eur, :status)";
$statement = $pdo->prepare($query);
$statement->execute(array('user_id' => $user["id"], 'currencyid' => $currencyid, 'symbol' => $symbol,'address' => $address, 'coins' => $balance, 'cost_eur' => $cost_eur, 'status' => true ));

if ($statement->execute()){
    $insertdatavalue = true;
}
else {
    $insertdatavalue = false;
}

}

Danke im voraus!

...zur Frage

mySQL: Wenn ID vorhanden, dann Update sonst INSERT ... ... WIE geht das?

Hallo Zusammen! Ich bin sehr frustriert und ratlos! Meine Lieblingsmeldung seit Tagen: "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ..."

Ich habe so einen GPS-Tracker, da lese ich Daten aus bzw. der Tracker stellt diese Daten in einem CSV-File zur Verfügung! Jeder Datensatz hat eine eindeutige fortlaufende Nummer (Spalte: index). Nun habe ich ein PHP-Script geschrieben, was die Daten in eine mySQL-Tabelle einliest. NEUE GPS-Daten werden dem CSV-File mittels der fortlaufenden Nummer hinzugefügt. Manche GPS-Daten im CSV-File "springen aus der Reihe" und ich kann diese im CSV-File komfortabel löschen. In der Tabelle habe ich selbst noch die Spalte id als PrimaryKey AUTO_INCREMENT hinzugefügt und den index als Unique gekennzeichnet (PRIMARY KEY (id), UNIQUE KEY index (index)). Nun möchte ich nur die Daten einlesen, welche NEU im CSV-File hinzugekommen sind und die "alten" Daten updaten! Klingt einfach, aber ich verzweifle ... Ich habe mit EXISTS gespielt, IF THEN, ... =====1. Versuch===== INSERT INTO db.bt747 (id, index, rcr) VALUES (NULL,1,'TEST') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), index=1; =====2. Versuch===== BEGIN IF(SELECT COUNT() FROM db.bt747 WHERE db.bt747.index = 7)>0 THEN UPDATE db.bt747 SET rcr = 'FREDDY', date = '2014-07-08', time = '21:23:44', valid = 'TEST' WHERE db.bt747.index = 7; ELSE INSERT INTO db.bt747 (rcr,date, time,valid) VALUES ('SEPPEL','2033-12-24','22:23:24','HALLO'); END IF; END =====3. Versuch===== IF EXISTS(SELECT COUNT() FROM db.bt747 WHERE db.bt747.index = 7) THEN UPDATE db.bt747 SET rcr = 'FREDDY', date = '2014-07-08', time = '21:23:44', valid = 'TEST' WHERE db.bt747.index = 7; ELSE INSERT INTO db.bt747 (rcr,date, time,valid) VALUES ('SEPPEL','2033-12-24','22:23:24','HALLO'); END IF;

Wenn ich die einzelnen Selects (SELECT COUNT(*) ..., UPDATE ..., INSERT ...) ausführe, funktioniert es, aber im Zusammenspiel mit IF THEN, EXISTS, ON DUPLICATE KEY UPDATE kommt immer die Lieblingsmeldung ...

Wahrscheinlich eine Kleinigkeit, für jemanden der sich damit auskennt ...

VIELEN Dank für Eure Hilfe Gruss W.

...zur Frage

Kaskadiertes löschen in MySQL?

Hallo zusammen,

ich habe 2 Tabellen: Person, Student.

Die Tabelle Student besitzt einen Fremdschlüssel auf die Personen Tabelle. Nun möchte ich eine Person löschen und der Student soll dabei ebenso kaskadiert gelöscht werden.

Ich habe es mit "on delete cascade from person where id=1; versucht, jedoch funktioniert es nicht, kann jemand helfen?

...zur Frage

MySQL - mehrere Werte in einer Zeile einbinden wie stell ich dies am besten an?

Also ich habe eine Pokemon Datenbank. Ich habe 2 Tabelle, jeweils "Pokemon" und "Trainer". Nun möchte ich es schaffen, dass ein Trainer mehrere Pokemon besitzen kann. ich habe mir überlegt den Trainer einen Primary Key zu geben und so diese zu verbinden. Gibt es vielleicht andere Vorgehensweisen? Ich möchte nämlich es schaffen das ein Trainer NUR max. 6 Pokemon besitzen darf und dies würde ich mit dem Primary Key nicht hinbekommen, oder?

...zur Frage

Was speichert man in Datenbanken ab?

Was wird da abgespeichert genau? .z.B. habe ich eine Website programmiert die halt nicht so groß ist aber ich möchte mit Datenbanken arbeiten was und wie (programm) speicher ich das ab?

...zur Frage

Finde den Fehler nicht(PHP)?

Ich arbeite an einem Login. In einer Tabelle "users" in einer Datenbank gibt es die Spalten "username" und "password". In einem Formular gebe ich beide Dinge ein um mich einzuloggen. Diese Eingaben vergleiche ich dann mit einer Abfrage und das daraus resultierende Ergebnis. Nun habe ich schon einige Ausgaben mit eingebaut, die überprüfen sollen, an was mein Problem liegt. Das Problem liegt daran, dass in $row nichts gespeichert ist. var_dump() gibt hier "NULL". Wenn ich die SQL-Abfrage jedoch in phpmyadmin eingebe funktioniert sie. Woran könnte es noch liegen?

<?php
//Initialisierung der Session
session_start();

//Verbindung zur Datenbank
$pdo = new PDO(DIE VERBINDUNGSDATEN);

//Übernahme aus Formular
$name = $_POST["username"];
$password = $_POST["pwd"];

$shapwd = sha1($password);

//Suchkriterien angeben
$sql = "SELECT * from users WHERE username=$name AND password=$shapwd";

//LoginOK zeigt Status login an
$loginOk = false;

var_dump($name);
echo "<br>";
var_dump($shapwd);
echo "<br>";
echo "<br>";

//Durchsuchen der Datenbank
foreach($pdo->query($sql) AS $row){    
    echo $row['username']."<br>";
    echo $row['password']."<br>";
        /*
    if($row['username']==trim($name) && $row['password']==trim($shapwd)){
        $loginOk = true;
        break;
    }*/
}

var_dump($row['username']);
echo "<br>";
var_dump($row['password']);
echo "<br>";
echo "<br>";

if($loginOk === true){
    header('Location: ../mainpage.php');
}else{
    header('Location: ../falsch.html');
}
?>
...zur Frage

Was möchtest Du wissen?