Wspomniałeś dwa parametry (o tej samej nazwie) na rachunku przygotowania, jeszcze podać wartość tylko dla pierwszego parametru (to co było o błędzie).
Nie do końca wiadomo, w jaki sposób PDO rozwiązał wewnętrznie problem o tej samej nazwie, ale zawsze można tego uniknąć.
dwa możliwe rozwiązania:
$sql = "select * from $table ".
"where "
"first_name like concat('%', :fname, '%') or ".
"last_name like concat('%', :lname, '%')";
$stmt= $DBH->prepare($sql);
$stmt->bindValue(':fname', $string, PDO::PARAM_STR);
$stmt->bindValue(':lname', $string, PDO::PARAM_STR);
$sql = "select * from $table ".
"where "
"first_name like concat('%', ?, '%') or ".
"last_name like concat('%', ?, '%')";
$stmt= $DBH->prepare($sql);
$stmt->bindValue(1, $string, PDO::PARAM_STR);
$stmt->bindValue(2, $string, PDO::PARAM_STR);
Nawiasem mówiąc, istniejąca droga zrobiliście nadal ma problemy z SQL injection.
Thx ajreal, dlaczego moja droga nadal jest wrażliwa na wstrzyknięcia? – bart
ponieważ zawarłeś wszystko w pełnym sql, a powinieneś związać dokładną wartość do przeszukania, np. Przykład – ajreal
@ajreal: tylko mała rzecz: brakuje ci. (kropka) pomiędzy '" where "' i '" first_name ... "' – Helmut